grafos: árvores geradoras mínimas -...
TRANSCRIPT
![Page 1: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/1.jpg)
1
Grafos: árvores geradoras mínimas
Graça Nunes
![Page 2: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/2.jpg)
2
Motivação
� Suponha que queremos construir estradas para interligar n cidades� Cada estrada direta entre as cidades i e j tem um custo
associado� Nem todas as cidades precisam ser ligadas diretamente,
desde que todas sejam acessíveis...
� Como determinar eficientemente quais estradas devem ser construídas de forma a minimizar o custo total de interligação das cidades?
![Page 3: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/3.jpg)
3
Motivação
� ExemploÁrvore Geradora Mínima de GG
![Page 4: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/4.jpg)
4
Subgrafo geradorSubgrafo Gerador ou subgrafo de espalhamento de um grafo G1(V1,E1) é um subgrafo G2(V2,E2) de G1 tal que V1=V2 e E2⊆⊆⊆⊆E1. Quando o subgrafo gerador é uma árvore, ele recebe o nome de árvore geradora (ou de espalhamento).
b e c são subgrafos geradores de ac é árvore geradora de ae b
![Page 5: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/5.jpg)
5
Subgrafo gerador de custo mínimo
� Formalmente� Dado um grafo não orientado G(V,E)
� onde w: E→ℜ+ define os custos das arestas� queremos encontrar um subgrafo gerador conexo T de
G tal que, para todo subgrafo gerador conexo T´ de G� T é um subgrafo gerador de custo mínimo
∑ ∑∈ ∈
≤Te Te
ewew´
)()(
![Page 6: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/6.jpg)
6
Árvore geradora mínima
� Claramente, o problema só tem solução se G é conexo� A partir de agora, assumimos G conexo
� Também não é difícil ver que a solução para esse problema será sempre uma árvore� Basta notar que T não terá ciclos pois, caso
contrário, poderíamos obter um outro sub-grafo T´, ainda conexo e com custo menor que o de T, removendo o ciclo!
![Page 7: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/7.jpg)
7
Árvore geradora mínima
� Árvore Geradora (Spanning Tree) de um grafo G é um subgrafo de G que contém todos os seus vértices (i.e. subgrafo gerador) e, ainda, é uma árvore
� Arvore Geradora Mínima (Minimum Spanning Tree, MST) é a árvore geradora de um grafo valorado cuja soma dos pesos associados às arestas é mínimo, i.e., é uma árvore geradora de custo mínimo
![Page 8: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/8.jpg)
8
Árvore geradora mínima
� Exemplo
![Page 9: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/9.jpg)
9
Árvore geradora mínima
� Como encontrar a árvore geradora mínima de um grafo G ?
� Algoritmo genérico
� Algoritmo de Prim
� Algoritmo de Kruskal
![Page 10: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/10.jpg)
10
Árvore geradora mínimaAlgoritmo Genérico
procedimento genérico(G)
A = ∅∅∅∅enquanto A não define uma árvore
encontre uma aresta (u,v) segura para A
A = A ∪∪∪∪ {(u,v)}
retorna A
G conexo, não direcionado, ponderado
A – conjunto de arestas
Abordagem ‘gulosa’ -> adiciona uma aresta segura a cada rodada
Aresta é ‘segura’ se mantém a condição de que, antes de cada iteração, A é uma árvore geradora mínima de um subconjunto de vértices
![Page 11: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/11.jpg)
11
Árvore geradora mínima� Alguns conceitos
� Um corte (V’; V-V’) de um grafo não direcionado G=(V;A) é uma partição de V
� Uma aresta (u,v) cruza o corte se um vértice pertence a V’ e o outro a V-V’
![Page 12: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/12.jpg)
12
Árvore geradora mínima� Alguns conceitos
� Um corte respeita um conjunto S de arestas se não existirem arestas em S que o cruzem
� Uma aresta cruzando o corte que tenha custo mínimo em relação a todas as arestas cruzando o corte é uma aresta leve
![Page 13: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/13.jpg)
13
Árvore geradora mínima
� Exemplo
� Se S é uma árvore geradora mínima de um sub-grafo e há um corte (V’;V-V’) que respeita S, a aresta leve (u,v) é uma aresta segura para S
![Page 14: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/14.jpg)
14
Algoritmo de Prim
procedimento Prim(G)
escolha um vértice s para iniciar a árvore
enquanto há vértices que não estão na árvoreselecione uma aresta segurainsira a aresta e seu vértice na árvore
Ponto importante do algoritmo: seleção de uma aresta segura
![Page 15: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/15.jpg)
15
Algoritmo de Prim
� Exemplo: iniciando o algoritmo pelo vértice 0
![Page 16: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/16.jpg)
16
Algoritmo de Prim
![Page 17: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/17.jpg)
17
Algoritmo de Prim
Árvore geradora mínima
![Page 18: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/18.jpg)
18
Algoritmo de Prim
� Há mais de uma árvore geradora mínima para um mesmo grafo
ou
![Page 19: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/19.jpg)
19
Algoritmo de Prim
� Maneira mais eficiente de determinar a aresta segura� Manter todas as arestas que ainda não estão na
árvore em fila(s) de prioridade (heaps)� Prioridade é dada à aresta de menor peso adjacente a
um vértice na árvore e outro fora dela
Complexidade de temp: O(|A| log(|V|))
![Page 20: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/20.jpg)
20
Algoritmo de Kruskal
� Também encontra árvore geradora mínima em O(|A| log |V|)
� Pode ser usado para florestas; � Constrói a árvore acrescentando arestas;� Não parte de um nó específico
Verifique na literatura!
![Page 21: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/21.jpg)
21
Árvore geradora mínima
� Exercício: encontre uma árvore geradora mínima para o grafo abaixo utilizando o algoritmo de Prim (e o de Kruskal)
1
2
3 4
5
6
4
10
7
1
2 1120
3
![Page 22: Grafos: árvores geradoras mínimas - wiki.icmc.usp.brwiki.icmc.usp.br/images/3/3b/SCC0203-1o-2012-6._GrafosAGM.pdf · Algoritmo de Prim Maneira mais eficiente de determinar a aresta](https://reader034.vdocuments.pub/reader034/viewer/2022051718/5a7135707f8b9ab1538c9f3c/html5/thumbnails/22.jpg)
22
Árvore geradora mínima
� Exercício
� Implementação em C de sub-rotina para encontrar uma árvore geradora mínima para um grafo (algoritmo de Prim)
� Decida como buscar as arestas seguras
� Lembre-se: essa busca deve ser eficiente!