Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente,...

22
Árvore Geradora Mínima

Transcript of Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente,...

Page 1: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

Árvore Geradora Mínima

Page 2: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

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)

Page 3: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

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.

Page 4: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

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.

Page 5: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

Exemplo

Page 6: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

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.

Page 7: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

Algoritmo PRIM(execução)

Exemplo:

c(F) = 1c(F) = 1

H

A

B

J

C

E

M L

G

D

I

F

4

7

4

3

7

5

6

2

23

1

4

2

3

8

6

4

c(F) = 3c(F) = 3c(F) = 6c(F) = 6c(F) = 9c(F) = 9c(F) = 11c(F) = 11c(F) = 13c(F) = 13c(F) = 17c(F) = 17c(F) = 21c(F) = 21c(F) = 25c(F) = 25c(F) = 28c(F) = 28c(F) = 33c(F) = 33

Page 8: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

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}

}

Page 9: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

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.

Page 10: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

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.

Page 11: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

Busca em profundidadePara 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)}

Page 12: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

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.

Page 13: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

Busca em Largura (usando lista)Procedure largura(G, a){

Q: Fila de verticesmarque aescreva(a)inclui(a) na filaEnquanto Q não está vaziafor cada vértice n adjacente a Q

if n não foi visitadomarque n como visitadoescreva(n)incluiNa Fila (n,Q)

TiraDaFila(q)}

Page 14: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

AnálisesA 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.

Page 15: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

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

Page 16: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

ABDCEGFHI

Pré-Ordem

Page 17: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

IN-Ordem

DBAEGCHFI

Page 18: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

DBGEHIFCA

Pós-Ordem

Page 19: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

PreOrdem

Procedure PreOrdem(N:Pno);

If N <> nil Then

Processa(N); {p. ex. imprime} PreOrdem(N^.esq);

PreOrdem(N^.dir);

End;

End;

Page 20: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

InOrdem

Procedure InOrdem(N:Pno);

If N <> nil Then

InOrdem(N^.esq);

Processa(N); {p. ex: imprime}

InOrdem(N^.dir);

End;

End;

Page 21: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

PosOrdem

Procedure PosOrdem(N:Pno)

If N <> nil Then

PosOrdem(N^.esq);

PosOrdem(N^.dir);

Processa(N); {p.ex.: imprime}

End;

End;

Page 22: Árvore Geradora Mínima. O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones,

Exercícios

1.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

2.Percorra a árvore ao lado das 3 formas possíveis