A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Árvore Geradora Mínima

Apresentações semelhantes


Apresentação em tema: "Árvore Geradora Mínima"— Transcrição da apresentação:

1 Árvore Geradora Mínima

2 O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones, etc. Uma árvore geradora mínima deve fornecer uma solução econômica, que precise de pouco cabo, tubulação, ou pouca quantidade de qualquer que seja o meio de conexão (arestas)

3 Definição Uma árvore geradora de um grafo é uma árvore não-enraizada cujo conjunto de vértices coincide com o conjunto de vértices do grafo cujas arestas são (algumas das) arestas do grafo.

4 Portanto... Uma árvore geradora conecta todos os vértices de um grafo sem formar ciclos. Um dos algoritmos utilizados é o PRIM. Ele é parecido com o algoritmo para o caminho mínimo, sendo que, um grafo poderá ter mais de uma árvore geradora mínima.

5 Exemplo

6 Algoritmo PRIM Cria-se um conjunto IN que inicialmente terá um vértice arbitrário (z) Para cada vértice de (z) que não esteja em IN, avaliamos a menor distância. A aresta que realiza a distância mínima é então incluída na árvore geradora mínima. O algoritmo termina quando todos os vértices do grafo pertençam a IN.

7 Algoritmo PRIM(execução)
Exemplo: 4 C B 3 4 6 D 7 A 8 2 1 M L E 5 4 4 I J 3 6 3 2 2 H G F 7 c(F) = 21 c(F) = 25 c(F) = 33 c(F) = 17 c(F) = 28 c(F) = 1 c(F) = 3 c(F) = 6 c(F) = 9 c(F) = 11 c(F) = 13

8 Algoritmo (Pseudo-código)
função Prim(G) { T := {} B := Um vértice de G Enquanto B não contém todos os vértices (u,v) :=   aresta de menor peso saindo de todos os vértices em B T :=   T U {(u,v)} B :=   B U {u} }

9 Algoritmos de busca Os problemas vistos até agora baseavam-se em alguma premissa do tipo: não passar pela mesma aresta, não passar pelo mesmo vértice, minimizar a distância percorrida, etc. Agora veremos algoritmos onde podemos percorrer todos os vértices em uma ordem particular, mas listando todos os vértice.

10 Busca em profundidade Neste procedimento, partimos de um vértice a e marcamos ele como visitado, prosseguindo para o ponto mais longe possível, até que nenhum vértice seja mais encontrado pelo caminho escolhido.

11 Busca em profundidade Para um grafo simples e conexo Procedure profundidade(G, a) { marque a como visitado escreva a for (cada vertice n adjacente de a) if n não foi visitado profundidade(G, n) }

12 Busca em largura Neste caso partimos do vértice a e seguimos por todos os seus adjacentes, em seguida seguimos cada um desses adjacentes, realizando a mesma operação.

13 Busca em Largura (usando lista)
Procedure largura(G, a) { Q: Fila de vertices marque a escreva(a) inclui(a) na fila Enquanto Q não está vazia for cada vértice n adjacente a Q if n não foi visitado marque n como visitado escreva(n) incluiNa Fila (n,Q) TiraDaFila(q) }

14 Análises A vantagem de se utilizar lista de adjacências no lugar de matriz, é interessante para a implementação, uma vez que torna o algoritmo muito mais simples. (como seria percorrer todos os adjacentes de a, em uma matriz?) Varrer a lista de adjacências o grafo determina a quantidade de trabalho a ser realizada em cada lado. Como existem n listas de adjacências, a quantidade de trabalho é pelo menos O(n), pois mesmo que ela esteja vazia, precisa ser verificada. Como existem M arestas, o trabalho para percorrer todas as arestas de uma lista é o(m). Portanto, os algoritmos são O(max(n,m)). O caso mais comum provavelmente é O(m) pois em geral temos mais arestas do que vértices.

15 Busca em arvores Os algoritmos de busca em largura e em profundidade se aplicam a quaisquer grafos, porém, existem 3 outros algoritmos apenas para árvores que são úteis. Pré-ordem InOrdem PosOrdem

16 Pré-Ordem ABDCEGFHI

17 IN-Ordem DBAEGCHFI

18 Pós-Ordem DBGEHIFCA

19 PreOrdem Procedure PreOrdem(N:Pno); If N <> nil Then Processa(N); {p. ex. imprime} PreOrdem(N^.esq); PreOrdem(N^.dir); End;

20 InOrdem Procedure InOrdem(N:Pno); If N <> nil Then InOrdem(N^.esq); Processa(N); {p. ex: imprime} InOrdem(N^.dir); End;

21 PosOrdem Procedure PosOrdem(N:Pno) If N <> nil Then PosOrdem(N^.esq); PosOrdem(N^.dir); Processa(N); {p.ex.: imprime} End;

22 Exercícios Crie o grafo a1(1,2,5); a2(2,5,3); a3(2,3,3); a4(4,2,3); a5(3,1,3) e faça a conexão utilizando o algoritmo PRIM Percorra a árvore ao lado das 3 formas possíveis


Carregar ppt "Árvore Geradora Mínima"

Apresentações semelhantes


Anúncios Google