Você está na página 1de 26

Algoritmo de Kruskal

Disciplina Anlise de Algoritmos


Bacharelado em CC
Algoritmo de Kruskal
Utiliza o arcabouo geral do mtodo guloso para MST, com os
seguintes detalhes:

O conjunto inicial X0 um subgrafo com |V| vrtices isolados e


nenhuma aresta.

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.
Exemplo de Aplicao de Kruskal

Considere o seguinte grafo G

Etapa 0 : X0 o subgrafo X0 = (V,E) onde V = {a,b,c,d,e,f,g,h,i} e E =

Lembre que : No algoritmo de PRIM, na etapa 0, X0 = (V,E), onde V = , E =


Etapa 1

Considera a aresta de menor custo {h,g} ligando duas


componentes conexas h e g distintas !

X1 = {h-g}
Etapa 2

X1 = {h-g}

Considera a 2a aresta de menor custo {i,c} ligando


duas componentes conexas distintas i e c

X2 = {h-g,i-c}
Etapa 3

X2 = {h-g,i-c}

Considera a 3a aresta de menor custo {g,f} ligando


duas componentes conexas distintas {h-g} e {f}

X3 = {h-g,i-c,g-f}
Etapa 4

X3 = {h-g,i-c,g-f}

Considera a 4a aresta de menor custo {a,b}, ligando as


componentes conexas distintas {a} e {b}

X4 = {h-g,i-c,g-f,a-b}
Etapa 5

X4 = {h-g,i-c,g-f,a-b}

Considera a 5a aresta de menor custo {c,f}, ligando duas


componentes conexas distintas

X5 = {h-g,i-c,g-f,a-b,c-f}
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

Exercicio: continue as demais etapas a partir da stima at chegar


neste resultado final.
Justificando a corretude do
Algoritmo de Kruskal
Considere o seguinte grafo G

Etapa 0 : X0 o subgrafo X0 = (V,E) onde V = {a,b,c,d,e,f,g,h,i} e E =


Corte S = { } , V S = V

Lembre que : No algoritmo de PRIM, na etapa 0, X0 = (V,E), onde V = , E =


Etapa 1

Considera a aresta de menor custo {h,g}

Corte: S = {h}, V- S = {a,b,c,d,e,f,g,i}


S contm os vrtices das arestas de X0
(nenhum vrtice !)

X1 = {h-g}
Etapa 2

X1 = {h-g}

Considera a 2a aresta de menor custo {i,c}

Corte: S = {h,g,i}, S contm os vrtices das arestas de X1

X2 = {h-g,i-c}
Etapa 3

X2 = {h-g,i-c}

Considera a 3a aresta de menor custo {g,f}

Corte: S = {h,g} V- S = {i,c,d,e,f,a,b}, cada aresta de X2


est contida em S ou em V-S.

X3 = {h-g,i-c,g-f}
Etapa 4

X3 = {h-g,i-c,g-f}

Considera a 4a aresta de menor custo {a,b}

Corte: S = {h,g,f,a} V- S = {i,c,d,e,b}, cada aresta de X3 est


contida em S ou em V-S.

X4 = {h-g,i-c,g-f,a-b}
Etapa 5

X4 = {h-g,i-c,g-f,a-b}

Considera a 5a aresta de menor custo {c,f}

Corte: S = {h,g,f,a,b}, V- S = {i,c,d,e}

X5 = {h-g,i-c,g-f,a-b,c-f}
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
Representao de conjuntos como
rvores
Como representar um conjunto {A1,..., An} por uma rvore ?
Exemplo: {A,B,C,D,E,F,G}

Passo 0: Constri, para cada elemento X, uma rvore de um nico elemento


(raiz) X0 de rank 0.

A0 B0 C0 D0 E0 F0 G0

Passos 1, 2 e 3: union(A,B), union(C,D), union(E,F), resultando em 4 rvores:

B1 D1 F1 G0

A0 C0 E0

union(A,B) union(C,D) union(E,F)


Passos 4 e 5: union(B,D), union(F,G) : resultado 2 rvores

D2
F1
B1
E0 G0
C0 A0

union(B,D) union(F,G)

Passo 6 : union(D,F)

D2

B1
F1
C0 A0
E0 G0
Representao de {A,B,C,D,E,F,G} em rvore
Representantes de Conjuntos
O representante oficial de uma rvore a sua raiz.
Assim, a rvore
D2

B1

C0 A0
tem como representante oficial a raiz D.

Tambm pode-se se referir a esta rvore atravs de qualquer de seus ns. Por
exemplo, a rvore da figura pode ser referida por A. Mas seu representante
oficial D.

Operao Find(A): retorna o representante oficial da rvore contendo o n A = D

Se rank D k ento Find(A) executa no mximo k passos para chegar at a raiz D.


Operaes Find e Makeset
Makeset(x)
1. pai(x) = x
2. rank(x) = 0

Complexidade de Makeset = O(1)

Find(x)
1. While x pai(x)
2. x = pai(x)
3. Retorna x

Complexidade de Find(x) = O(k), onde k = profundidade da rvore contendo x


= rank da raiz desta rvore

Observao: a raiz de uma rvore o nico n que seu prprio pai.


Operao Union
Union(x,y)

1. Rx = Find(x)
2. Ry = Find(y)
3. Se Rx = Ry: retorna x
4. Se rank(Rx) > rank(Ry)
5. pai(Ry) = Rx
6. Else
7. Pai(Rx) = Ry
8. Se rank(Rx) = rank(Ry)
9. rank(Ry) = Rank(Ry) + 1
Complexidade das operaes Find
e Union
Qual a relao entre o nmero n de elementos de uma rvore e a sua
profundidade k ?

Vamos mostrar k log2(n)

Propriedade 1: Para todo x (diferente da raiz), rank(x) < rank(pai(x))

Propriedade 2: Qualquer n de rank k tem no mnimo 2k descendentes.


Prova: por induo sobre k
Base da induo: k = 0. Neste caso o nico descendente o prprio n. Portanto
nmero de descendentes = 1 = 20
Passo da induo: Suponha o resultado verdadeiro para rank = k-1 e seja x um
n de rank k > 0. Neste caso, a rvore de x foi obtida juntando-se duas rvores
de raiz u e raiz v de mesmo rank k-1. Logo o nmero de descendentes de x =
nmero de descendentes de u + nmero de descendentes de v 2k-1 + 2k-1 = 2.
2k-1 = 2k
Complexidade das operaes Find
e Union
Qual a relao entre o nmero n de elementos de uma rvore e a sua
profundidade k ?
Considere uma rvore de n elementos com raiz x de rank k
Ento k = profundidade da rvore

Pela propriedade 2, temos que n 2k


Logo: log2(n) k

Portanto : k log2(n)

Portanto a complexidade de Find e Union O(log(n)), uma vez que todas as


rvores tm profundidade mxima log2(n)

Você também pode gostar