Sunteți pe pagina 1din 4

Algoritmul lui Kruskal

Moment prezentare generala


S notm cu n numrul de vrfuri din graf (n=|X|). Iniial considerm c nici o
muchie din graf nu a fost selectat, deci fiecare vrf din graf este vrf izolat. Cu
alte cuvinte, la momentul iniial avem o pdure format din n arbori, fiecare
arbore fiind format dintr-un singur vrf.

La fiecare pas se selecteaz o muchie de cost minim care nu a mai fost


selectat i care nu formeaz cicluri cu muchiile deja selectate.

Pasul 1:
Selectm o muchie de cost minim (n cazul nostru, de cost 1) i obinem:

Observai c n graful obinut exist n - 1 = 4 arbori, pentru c am unificat


arborii corespunztori extremitilor muchiei selectate.

Pasul 2:
Selectm din nou o muchie de cost minim (costul minim fiind 1):

Observai c n graful obinut exist n - 2 = 3 arbori.

Pasul 3:
La acest pas nu mai putem selecta o muchie de cost 1, deoarece s-ar obine un
ciclu. Selectm muchia de cost 2:

Pas 4:
Selectnd, n final, muchia de cost 3, obinem un graf fr cicluri cu n-1 muchii,
deci un arbore:

Observai c la fiecare pas al algoritmului sunt unificai doi arbori, cei


corespunztori extremitilor muchiei selectate. Deci, dup n-1 pai, pdurea
iniial va fi transformat ntr-un singur arbore.

Algoritmul lui Kruskal utilizeaz metoda Greedy, la fiecare pas fiind selectat o
muchie de cost minim, convenabil (care nu formeaz cicluri cu cele deja
selectate).

Aplicaii
Exercitiu varianta 1
Construieste copilul un graf, apoi aplica pas cu algoritmul lui Kruskal.
Exerciiu varianta 2
Se da un graf. Sa construiasca pas cu pas un apm folosind algoritmul lui
Kruskal.

Moment evaluare
Exerciiul 1 (gril)
Se d graful ... Considernd c prin aplicarea algoritmului lui Kruskal am
selectat deja muchiile ..., care muchie poate fi selectat la pasul urmtor?
Exerciiul 2 (gril)
Se d graful ... Care dintre urmtoarele grafuri pariale se pot obine dup
selectarea a ... muchii prin algoritmul lui Kruskal?
Exerciiul 3
Se d graful ... Cte componente conexe va avea graful parial obinut dup
selectarea a ... muchii din acest graf prin algoritmul lui Kruskal?

Implementare
Pentru implementarea algoritmului este necesar rezolvarea urmtoarelor dou
probleme:
cum extragem muchia de cost minim
cum testm dac muchia selectat formeaz sau nu cicluri cu cele deja
selectate.
Pentru a extrage minimul, o idee ar fi s sortm muchiile cresctor dup cost i
s parcurgem secvenial muchiile ordonate.
Pentru a realiza sortarea muchiilor grafului, vom reprezenta graful prin lista
muchiilor (un vector cu m componente, fiecare component fiind o structur n
care reinem cele dou extremiti i costul muchiei).

Declaraii Vizualizare

O muchie va forma cicluri cu muchiile deja selectate dac i numai dac ntre
extremitile muchiei exist cel puin un lan. Vizualizare
Cu alte cuvinte, muchia [x, y] ca forma cicluri cu muchiile deja selectate dac i
numai dac extremitile muchiei (x i y) sunt n aceeai component conex.

Pentru a testa dac o muchie formeaz cicluri cu muchiile deja selectate este
suficient s testm dac extremitile muchiei se gsesc n aceeai
component conex. Pentru aceasta va trebui s inem permanent evidena
componentelor conexe (arborilor) care se formeaz.

Reprezentarea informaiilor
n numrul de vrfuri
m numrul de muchii din graf
G graful dat, reprezentat prin lista muchiilor (un vector cu m componente,
fiecare component fiind o structur n care reinem cele dou extremiti i
costul muchiei).
A arborele parial de cost mimim, reprezentat ca un vector n-1 componente n
care vom reine indicii din G ai muchiilor selectate
c vector cu n componente n care vom reine evidena componentelor conexe
(c[i] = componenta conex creia i aparine vrful i). Componentele conexe
vor fi identificate printr-un reprezentant (vrful cu indicele cel mai mic din
componenta conex respectiv).

Pseudocod
Pas 1. Iniializare
Se citesc n, m i G (muchiile grafului).
Iniializm vectorul c: c[i]=i, pentru orice i=1,n (fiecare vrf reprezint o
component conex).
Pas 2. Sortare
Se ordoneaz muchiile din vectorul G cresctor dup cost.
Pas 3 Selectare muchii
Se repet de n-1 ori
se alege o muchie cost minim, care nu a mai fost selectat i care nu
formeaz cicluri cu muchiile deja selectate
se memoreaz indicele muchiei selectate n vectorul A
se unific componentele conexe ale extremitilor muchiei selectate.

Exemplu
Se d un graf. Se vede reprezentarea informaiilor.
Si se urmrete pe graf i pe reprezentarea informaiilor execuia algoritmului
scris n pseudocod.

Teorem de corectitudine Buton


Algoritmul lui Kruskal genereaz un arbore parial de cost minim.
Demonstraie
1. Algoritmul selecteaz numrul maxim de muchii care nu formeaz cicluri,
deci, conform teoremei de caracterizare a arborilor, se obine un arbore parial.
2. S demonstrm c arborele parial obinut n urma aplicrii algoritmului lui
Kruskal este un arbore parial de cost minim:
Fie A = (a1, a2, ..., an-1) muchiile arborelui rezultat n urma aplicrii
algoritmului, n ordinea selectrii lor. Presupunem prin reducere la absurd c
arborele obinut nu este de cost minim, deci exist A = (a1', a2', ...., an-1') un
alt arbore parial, astfel nct c(A) < c(A).
Fie k = min { i | 1 i n, ai ai }, primul indice de la care A i A difer.
Deci A = (a1, a2, ..., ai-1, ai, ..., an-1)
A = (a1, a2, ..., ai-1, ai', .., an-1'), cu ai ai' .
Evident c(ai) c(aj), j { i, ..., n-1 }, altfel algoritmul ar fi selectat muchia
aj' n loc de ai, deoarece ar fi avut cost mai mic i nu formeaz cicluri cu
a1,...,ai-1. Adaug la A' muchia ai. Se formeaz un ciclu n care intervin doar
muchii din {ai'...an-1'}. Elimin una din muchiile ciclului diferit de ai. Se obine
un arbore A" = (a1,..., ai-1, ai, ai+1"..., an-1") care are i muchii comune cu A.
n plus c(A")-c(A') = c(ai) - c(aj') 0 c(A") c(A').
Repetm procedeul de nlocuire a muchiilor din A' cu muchiile din A. Obinem
c(A') c(A") ... c(A). Dar am presupus c c(A') < c(A) contradicie. Deci
A este un arbore parial de cost minim.

Complexitatea algoritmului Buton


Pas 1: Iniializare
O(m) pentru citirea datelor i O(n) iniializarea vectorului c.
Pas 2: Sortare
Complexitatea acestui pas depinde de algoritmul de sortare folosit.
n implementarea acestui pas am utilizat algoritmul de sortare rapid
(QuickSort), deci complexitatea n medie este O(m log m).
Pas 3: Selecie muchii
Pentru a selecta cele n-1 muchii ale arborelui parial de cost minim se va
parcurge (n cazul cel mai defavorabil) toat lista muchiilor.
Pentru fiecare muchie selectat se realizeaz unificarea componentelor conexe
ale extremitilor muchiei, operaie de complexitate O(n) n implementarea
prezentat.
Deci complexitatea la acest pas va fi O(m+n2).

Observaii
1. n cazul n care arborele parial de cost minim este gsit suficient de
repede, un numr mare de muchii rmn netestate i n acest caz se pierde
timp inutil cu sortarea acestor muchii. O alt idee, mai eficient, ar fi s
organizm muchiile grafului ca un min-heap, structur ce permite extragerea
eficient a muchiei de cost minim.
n acest caz, pentru organizarea muchiilor grafului ca heap sunt necesare O(m)
operaii.
Pentru extragerea fiecarei muchii de cost minim sunt necesare O(m log m)
operaii.
2. Selectarea unei muchii implic i o operaie de unificare a dou
componente conexe, operaie pe care am implementat-o n O(n). Acest pas se
poate optimiza pn la o complexitate medie de O(log n).

Moment
Surs C
Surs Pascal
Watch pe un exemplu/doua cu explicaii

S-ar putea să vă placă și