Upload
dinhnhu
View
217
Download
0
Embed Size (px)
Citation preview
Minimum Spanning TreeAlgoritmos de Prim e Kruskal
Fernando Lobo
Algoritmos e Estrutura de Dados II
1 / 35
Algoritmo de Prim
I Inicialmente A = ∅
I Mantemos V − A numa fila com prioridade Q.
I A chave de cada no na fila indica o custo mınimo de juntaresse no a um qualquer no de A.
I Quando o algoritmo termina, a fila Q esta vazia. A MST A edada por:
A = {(v , v .π) : v ∈ V − {s}}
2 / 35
Pseudocodigo
MST-Prim(G ,w , s)
for each u ∈ G .Vu.key = ∞u.π = nil
s.key = 0Q = G .Vwhile Q 6= ∅
u = Extract-Min(Q)for each v ∈ G .Adj [u]
if v ∈ Q and w(u, v) < v .keyv .π = uv .key = w(u, v)
3 / 35
Exemplo
4 / 35
Inicializacao
5 / 35
1a iteracao do ciclo while
6 / 35
2a iteracao do ciclo while
7 / 35
3a iteracao do ciclo while
8 / 35
4a iteracao do ciclo while
9 / 35
5a iteracao do ciclo while
10 / 35
6a iteracao do ciclo while
11 / 35
7a iteracao do ciclo while
12 / 35
Complexidade do Algoritmo de Prim
I Depende da implementacao da fila com prioridade.
I Se implementarmos com um heap binario:
I Inicializacao → Build-Heap → O(V )
I Ciclo while e executado |V | vezes.
I |V | Extract-Mins → O(V lg V )
I No maximo, |E | Decrease-Keys → O(E lg V )
I Total = O(V lg V + E lg V ) = O(E lg V )
I A verificacao if v ∈ Q pode ser obtida em tempo constante semantivermos um bit vector com indicacao dos nos que estaoem Q.
13 / 35
Complexidade do Algoritmo de Prim
I E possıvel obter uma complexidade melhor se usarmos heapsde Fibonacci para implementar a fila.(Nao demos estes heaps, mas se tiverem curiosidade poder lero capıtulo do vosso livro que fala sobre eles.)
I Consegue-se fazer com que |E | Decrease-Keys tenhacomplexidade O(E ), amortizado.=⇒ TPrim = O(V lg V + E )
I E um ganho substancial para grafos esparsos.
14 / 35
Algoritmo de Kruskal
I Inicialmente A = ∅. No final A sera uma MST.
I Ordenamos os arcos do grafo por ordem crescente de peso.
I Percorre-se a lista ordenada dos arcos, um a um, eadicionamos o arco a A desde que nao produza ciclo.
I Ao contrario do algoritmo de Prim, o algoritmo de Kruskalmantem ums floresta. Inicialmente a floresta tem |V | arvores,uma para cada no. No final, a floresta so tem uma arvore quee uma Minimum Spanning Tree.
15 / 35
Exemplo: Inicializacao
16 / 35
Iteracao 5
21 / 35
Iteracao 6
22 / 35
Iteracao 7, 8, 9, 10
23 / 35
Evolucao da floresta de arvores
Inicializacao
24 / 35
Iteracao 5
29 / 35
Iteracao 6
30 / 35
Iteracao 7, 8, 9, 10
31 / 35
Implementacao do Algoritmo de Kruskal
I Necessitamos de uma estrutura de dados que permita manterdinamicamente uma floresta de arvores.
I Inicialmente temos |V | arvores.
I A cada passo do algoritmo juntamos duas arvores e ficamoscom menos uma arvore na floresta.
I Na realidade, nao e necessario manter explicitamente asarvores.
I Basta manter os nos que cada arvore contem.
I Nota: As arvores sao disjuntas. Um no e elemento de uma euma so arvore.
32 / 35
Implementacao do Algoritmo de Kruskal
I O que necessitamos e de uma estrutura de dados para manteruma coleccao S de conjuntos disjuntos.
I Essa estrutura de dados tem o nome UNION-FIND (vamosestuda-la em detalhe na proxima aula).
I Suporta estas operacoes: Make-Set(x), Find-Set(x) eUnion(x , y)
I Make-Set(x): cria {x} e acrescenta-o a S .
I Find-Set(x): retorna um identificador do conjunto quecontem x .
I Union(x , y): faz a uniao do conjunto que contem x com oconjunto que contem y e acrescenta-o a S , eliminado osconjuntos originais que continham x e y .
33 / 35
Pseudocodigo
MST-Kruskal(G ,w)
A = ∅for each v ∈ G .V
Make-Set(v)sort G .E in ascending order of weight wfor each (u, v) ∈ G .E , taken in ascending order of weight
if Find-Set(u) 6= Find-Set(v)A = A ∪ {(u, v)}Union(u, v)
return A
34 / 35
Complexidade do Algoritmo de Kruskal
I Primeiro ciclo for: O(V ) Make-Sets
I Ordenar E : O(E lg E )
I Segundo ciclo for: O(E ) Find-Sets e UnionsNa realidade so fazemos O(V ) Unions. Porque?
I A complexidade vai depender da dorma como se implementa aestrutura de dados UNON-FIND.
I Mas e possıvel obter uma complexidade de O(E lg V ).Veremos como na proxima aula.
35 / 35