Escolar Documentos
Profissional Documentos
Cultura Documentos
Roteiro
1. Introdução
3. Algoritmo de Prim
4. Algoritmo de Kruskal
Introdução
Exemplo 1
Roteiro
1. Introdução
3. Algoritmo de Prim
4. Algoritmo de Kruskal
Árvore Geradora
Uma árvore geradora de um grafo não-direcionado G = (V , E ) é
um subgrafo de G que é uma árvore e contém todos os vértices de
G.
Árvore Geradora
Um grafo pode ter várias árvores geradoras.
Exemplo 2
A figura abaixo mostra a execução do DFS para encontrar a árvore
geradora do grafo abaixo.
MST(G )
1 A=∅
2 while A 6= MST
3 ache uma aresta (u, v ) segura para A
4 A = A ∪ {(u, v )}
5 return A
Corte de um Grafo
Corte de um Grafo
Roteiro
1. Introdução
3. Algoritmo de Prim
4. Algoritmo de Kruskal
Algoritmo de Prim
Exemplo 3
Exemplo 3
Exemplo 3
Pseudocódigo
Prim(G , r )
1 for each u ∈ V [G ] I w (u, v ): peso da
2 key[u] = ∞ aresta (u, v ).
3 π[u] = NIL
4 key[r ] = 0 I key[v ] : peso mı́nimo
5 Q = V [G ] conectando o vértice
6 while Q 6= ∅ v a um vértice na
7 u = Extract-Min(Q) árvore.
8 for each v ∈ Adj[u] I Q fila de prioridade
9 if v ∈ Q and w (u, v ) < key[v ] (min-priority).
10 key[v ] = w (u, v )
11 π[v ] = u
Tempo de Execução
Roteiro
1. Introdução
3. Algoritmo de Prim
4. Algoritmo de Kruskal
Algoritmo de Kruskal
Exemplo 4
Exemplo 4
Exemplo 4
Conjuntos Disjuntos
Pseudocódigo
Kruskal(G , r )
1 A=∅
2 for each v ∈ G [V ]
3 Make-Set(v )
4 ordene E em ordem crescente de pesos
5 for each (u, v ) da lista ordenada
6 if Find-Set(u) 6= Find-Set(v )
7 A = A ∪ {(u, v )}
8 Union(u, v )
9 return A
Complexidade
I Inicialização: O(n).
I Ordenação de arestas: O(m log m).
I Operações Union-Find: O(n log n).
I Custo Total: O(m log n)
Exercı́cio 1
Referências