Árvores geradoras. centro de informática - ufpe 2 subgrafo gerador o subgrafo gerador (ou de...

22
Árvores Geradoras

Upload: internet

Post on 18-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Árvores Geradoras

Page 2: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

2

Subgrafo gerador

O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2) de G1 tal que V1=V2. Ou seja, G2 contém todos os vértices de G1

Quando o subgrafo gerador é uma árvore, ele recebe o nome de árvore geradora (ou de espalhamento – spanning tree).

Page 3: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

3

Árvore geradora

Uma árvore T é denominada árvore geradora de um grafo conexo G se T é um sub-grafo de G e contém todos os vértices de G

Page 4: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

4

Subgrafo e Árvore geradora

(b) e (c) são subgrafos geradores de (a) (c) é árvore geradora de (a) e (b)

Page 5: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

5

Árvore geradora (outro exemplo)

Page 6: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

6

Floresta geradora

Se um grafo é desconexo, não podemos identificar nenhuma árvore geradora. Mas podemos identificar no mínimo uma floresta de árvores geradoras, uma para cada componente do grafo.

Page 7: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

7

Exemplo de aplicação de árvore geradora

A figura abaixo ilustra um conjunto de terras separadas por muros. Supondo que todas são cheias de água, como podemos esvaziar todas, furando um número mínimo de buracos nos muros?

Page 8: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

8

Se cada terra e a área exterior formam o conjunto de vértices, e se cada muro separando duas áreas é representado por uma aresta, temos:

Uma árvore geradora, é a solução

Page 9: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

9

Teorema

Um grafo simples é conexo se e somente se possui uma árvore geradora

Prova:1) Se G (simples) possui uma árvore geradora então G é conexoSeja T a árvore geradora de G.T contem todos os nós de G.Existe um caminho em qualquer dois nós de T.Como T é subgrafo de G e contem todos os nós de G, existe um caminho entre quaisquer dois nós de G.Logo G é conexo

Page 10: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

10

Prova:2) Se G (simples) é conexo então ele possui uma árvore geradora.Se G é conexo e não é uma árvore, ele deve conter um circuito simples.Remova uma aresta de um desses circuitos simples.O subgrafo resultante dessa operação possui uma aresta a menos, mas contem todos os nós de G e ainda é conexo.Se esse subgrafo não é uma árvore, ele possui um circuito simples. Do mesmo modo, remova uma aresta desse circuito. Repita esse processo até que não haja mais circuitos.O resultado é uma árvore geradora de G.

Page 11: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

11

Algoritmo para achar a árvore geradora

Se G não contém nenhum ciclo ele já é a sua própria árvore geradora.

Suponhamos agora que ele contém um ciclo. Tirando uma aresta desse ciclo resulta em um grafo ainda conexo.

Continuando assim até que não tenha nenhum ciclo, o grafo obtido é um grafo conexo que é uma árvore.

Algoritmo baseado na prova do teorema visto

Page 12: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

12

Algoritmo para achar a árvore geradora

O algoritmo baseado na prova do teorema não é eficiente, pois ele requer que circuitos simples sejam identificados.

No lugar de construir árvores geradoras retirando arestas do grafo, vamos construí-las adicionando arestas sucessivamente.

Podemos fazer isso de duas maneiras1) Fazendo busca em profundidade2) Busca em largura

Page 13: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

13

Busca em profundidade para achar a árvore geradora (depth-first search)

1) Arbitrariamente escolha um nó do grafo para a raiz.2) Construa um caminho começando por esse nó, adicionando arestas sucessivamente, onde cada nova aresta é incidente com o último nó do caminho e com um nó ainda não pertencente ao caminho3) Continue adicionando arestas a esse caminho para ir o mais longe possível.4) Se o caminho possui todos os nós do grafo, então o caminho é a árvore geradora do grafo.5) Caso contrário, retorne ao nó mais próximo de maneira que um novo caminho possa ser construído a partir desse nó e que contenha nós ainda não visitados.6) Esse processo continua até que todos os nós sejam incluídos na árvore geradora

Page 14: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

14

Busca em profundidade para achar a árvore geradora (depth-first search) - Exemplo

Backtracking

Page 15: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

15

Busca em largura para achar a árvore geradora (breadth-first search)

1) Arbitrariamente escolha um nó do grafo para a raiz.2) Adicione todas as arestas incidentes a esse nó3) Os novos nós adicionados se tornam os nós do nível 1 da árvore geradora4) Arbitrariamente, ordene os nós do nível 15) Seguindo essa ordem, acrescente cada aresta incidente com os nós do nível, desde que ela não forme um circuito simples.6) Arbitrariamente, ordene os filhos de cada nó do nível 1.7) Isso produz os nós do nível 28) Esse processo continua até que todos os nós sejam incluídos na árvore geradora

Page 16: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

16

Busca em largura para achar a árvore geradora (bread-first search) - Exemplo

12

3

Page 17: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Centro de Informática - UFPE

17

Busca em árvores

Na busca em profundidade, nós penetramos o mais profundamente possível na árvore, antes de partir para outro vérticePor exemplo, temos a árvore rotulada onde os rótulos correspondem à ordem em que os vértices foram visitados pela busca em profundidade.

11

2 8

37

912

4 5 6

1

10

Page 18: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Árvores(Algoritmos)

Page 19: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Adolfo Duran - 2004 Teoria dos Grafos 19

Algoritmo de Prim

A característica principal do algoritmo de Kruskal é que ele seleciona a melhor aresta sem se preocupar com a conexão com as arestas selecionadas antes.

O resultado é uma proliferação de árvores que eventualmente se juntam para formar uma única árvore.

Já que sabemos que no final temos que produzir uma árvore só, por que não tentar fazer com que uma árvore cresça naturalmente até a obtenção da árvore geradora mínima?

Page 20: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Adolfo Duran - 2004 Teoria dos Grafos 20

Algoritmo de Prim

Assim, a próxima aresta selecionada seria sempre uma que se conecta à arvore que já existe. Essa é a ideia do algoritmo de Prim.

No início, o conjunto B contém um vértice arbitrário. A cada passo, o algoritmo considera todas as arestas que tocam B e seleciona a de menor peso. Depois, o algoritmo acrescenta a B o vértice ligado por essa aresta que não estava em B. O processo continua até que B contenha todos os vértices de G.

Page 21: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Adolfo Duran - 2004 Teoria dos Grafos 21

Exemplo com o Algoritmo de Prim

Começando, arbitrariamente, pelo vértice a

Passo Aresta considerada

Componentes

Início - {a} 1 (b,a) {a,b}2 (c,b) {a,b,c}3 (d,a) {a,b,c,d}4 (e,d) {a,b,c,d,e}5 (g,d) {a,b,c,d,e,f}6 (f,g) {a,b,c,d,e,f,g}

Page 22: Árvores Geradoras. Centro de Informática - UFPE 2 Subgrafo gerador O subgrafo gerador (ou de espalhamento) de um grafo G1(V1,E1) é um subgrafo G2(V2,E2)

Adolfo Duran - 2004 Teoria dos Grafos 22

a b c d e f ga 1 4 b 1 2 6 4 c 2 5 6 d 4 6 3 4e 4 5 3 8 7f 6 8 3g 4 7 3

Algoritmo de Prim

Para implementar eficientemente esse algoritmo, utiliza-se uma matriz de adjacências A[1..n, 1..n], onde cada elemento indica a distância entre dois vértices.

Caso dois vértices não sejam ligados por uma aresta o valor será .