Академический Документы
Профессиональный Документы
Культура Документы
Algoritmo de Kruskal
Utiliza o arcabouo geral do mtodo guloso para MST, com os
seguintes detalhes:
A cada etapa k :
O corte (S,V-S) s deve satisfazer a propriedade de respeitar o
Xk-1, isto , cada aresta de Xk-1 tem seus dois vrtices do mesmo
lado do corte. Nenhuma aresta de Xk-1 atravessa o corte.
No necessariamente um lado do corte contm TODAS as
arestas de Xk-1, como no algoritmo PRIM.
Etapa 1
Etapa 2
X1 = {h-g}
Etapa 3
X2 = {h-g,i-c}
Etapa 4
X3 = {h-g,i-c,g-f}
Etapa 5
X4 = {h-g,i-c,g-f,a-b}
Etapa 6
X5 = {h-g,i-c,g-f,a-b,c-f}
Considera a 6a aresta de menor custo {c,d} ligando duas
componentes conexas distintas.
Repare que a aresta i-g liga vrtices da mesma componente
conexa de X6, logo no pode ser considerada, embora seja
de menor custo !
Resultado final
Justificando a corretude do
Algoritmo de Kruskal
Considere o seguinte grafo G
Etapa 1
Etapa 2
X1 = {h-g}
Etapa 3
X2 = {h-g,i-c}
Etapa 4
X3 = {h-g,i-c,g-f}
X4 = {h-g,i-c,g-f,a-b}
Etapa 5
X4 = {h-g,i-c,g-f,a-b}
Etapa 6
X5 = {h-g,i-c,g-f,a-b,c-f}
Considera a 6a aresta de menor custo {c,d}
Corte: S = {h,g,i,c,a,b,f}, V-S = {d,e}
X6 = {h-g,i-c,g-f,a-b,c-f,c-d}
Repare que a aresta i-g liga vrtices da mesma componente
conexa de X6, logo no pode ser considerada, embora seja de
menor custo !
Algoritmo de Kruskal
1. X = grafo (V,)
2. Para cada vrtice v V
3. Makeset(v) ; % transforma cada vrtice isolado
uma componente conexa de X
4. Ordena as arestas de G em ordem crescente de custo
5. Para cada aresta (u,v) de G, considerando a ordem
crescente de custo
6. Se Find(u) Find(v) % no mximo |V| - 1 vezes
7. X = X {(u,v)}
8. Union(Find(u), Find(v)
9. Retorna X
Esquema Geral:
|V|.makeset + O(|E|.log(|E|) + |E|.(Find) + (|V| - 1) (Union)
Anlise da Complexidade
Esquema Geral:
|V|.makeset + O(|E|.log(|E|) + |E|.(Find) + (|V| - 1) (Union)
A complexidade depende da implementao das operaes de
conjunto:
Makeset, Find, Union
Implementao de Find e Union utilizando representao de
conjuntos por rvores e ranks em cada n da rvore : log(|V|)
Complexidade = |V|.O(1)+ O(|E|.log(|E|) + O(|E|+|V|).(log(|V|))
Pior caso |E| = |V|2 : O( log(|E|) = O( log(|V) )
Complexidade = O( |V|2 log(|V| )
Ver prova nos slides
seguintes
B0
C0
D0
E0
F0
G0
D1
F1
A0
C0
E0
union(A,B)
union(C,D)
union(E,F)
G0
F1
B1
E0
C0
G0
A0
union(B,D)
union(F,G)
Passo 6 : union(D,F)
D2
B1
C0
F1
A0
E0
Representao de {A,B,C,D,E,F,G} em rvore
G0
Representantes de Conjuntos
A0
Operao Union
Union(x,y)
1.
2.
3.
4.
5.
6.
7.
8.
9.
Rx = Find(x)
Ry = Find(y)
Se Rx = Ry: retorna x
Se rank(Rx) > rank(Ry)
pai(Ry) = Rx
Else
Pai(Rx) = Ry
Se rank(Rx) = rank(Ry)
rank(Ry) = Rank(Ry) + 1