Sunteți pe pagina 1din 2

Algoritmul lui Kruskal

Metoda Greedy este una dintre cele mai directe tehnici de proiectare a algoritmilor care
poate fi aplicată la o gamă largă de probleme. În general, această metodă se aplică problemelor de
optimizare.
Majoritatea acestor probleme constau în determinarea unei submulţimi B, a unei mulţimi A
cu n elemente care să îndeplinească anumite condiţii pentru a fi acceptată. Orice astfel de
submulţime care respectă aceste restricţii se numeşte soluţie posibilă.
Din mulţimea tuturor soluţiilor posibile se doreşte determinarea unei soluţii care
maximizează sau minimizează o funcţie de cost. O soluţie posibilă care realizează acest lucru se
numeşte soluţie optimă. Considerăm că soluţiile posibile au următoarea proprietate: dacă
B este o soluţie posibilă, atunci orice submulţime a sa este soluţie posibilă.
Specificul acestei metode constă în faptul că se construieşte soluţia optimă pas cu pas, la
fiecare pas fiind selectat în soluţie elementul care pare "cel mai bun" la momentul respectiv, în
speranţa că va duce la soluţia optimă globală.

Algoritmul lui Kruskal  este un algoritm în teoria grafurilor care găsește arborele parțial de cost
minim pentru un graf conex ponderat. Cu alte cuvinte, găsește submulțimea muchiilor care formează
un arbore care include toate vârfurile și care este minimizat din punct de vedere al costului. Dacă
graful nu este conex, atunci algoritmul găsește o pădure parțială de cost minim (un arbore parțial de
cost minim pentru fiecare componentă conexă). 

Algoritmul funcționează în felul următor:

 creează o pădure F (o mulțime de arbori), unde fiecare vârf din graf este un arbore separat
 creează o mulțime S care conține toate muchiile din graf
 atât timp cât S este nevidă
o elimină o muchie de cost minim din S
o dacă acea muchie conectează doi arbori distincți, atunci adaugă muchia în pădure,
combinând cei doi arbori într-unul singur
o altfel, ignoră muchia

        La sfârșitul algoritmului, pădurea are doar o componentă care reprezintă un arbore parțial de
cost minim al grafului.

Exemplu:

Consideram un graf cu 7 noduri si muchiile {1, 2}, {2, 3}, {4, 5}, {6, 7}, {1, 4}, {2, 5}, {4, 7}, {3, 5}, {2, 4},
{3, 6}, {5, 7}, {5, 6} . Aplicam algoritmul, iar structura componentelor conexe, pentru fiecare pas, este:
Pasul Muchia Componentele conexe ale
considerata subgrafului <X, A>
Initializare— {1}, {2}, {3}, {4}, {5}, {6}, {7}
1 {1, 2} {1, 2}, {3}, {4}, {5}, {6}, {7}
2 {2, 3} {1, 2, 3}, {4}, {5}, {6}, {7}
3 {4, 5} {1, 2, 3}, {4, 5}, {6}, {7}
4 {6, 7} {1, 2, 3}, {4, 5}, {6, 7}
5 {1, 4} {1, 2, 3, 4, 5}, {6, 7}
6 {2, 5} respinsa (formeaza ciclu)
7 {4, 7} {1, 2, 3, 4, 5, 6, 7}

Multimea A este initial vida si se completeaza pe parcurs cu muchii acceptate (care nu


formeaza un ciclu cu muchiile deja existente in A). In final, multimea A va contine muchiile {1, 2}, {2,
3}, {4, 5}, {6, 7}, {1, 4}, {4, 7}. La fiecare pas, graful partial <X, A> formeaza o padure de componente
conexe, obtinuta din padurea precedenta unind doua componente. Fiecare componenta conexa este
la randul ei un arbore partial de cost minim pentru varfurile pe care le conecteaza. Initial, fiecare varf
formeaza o componenta conexa. La sfarsit, vom avea o singura componenta conexa, care este
arborele partial de cost minim cautat .

Analizând acest algoritm observăm ca regăsim in el caracteristicile problemelor rezolvate prin


metoda Greedy și anume :
- Problema poate fi imaginată ca o mulțime A cu n elemente
- O soluție posibilă este o submulțime ( B⊆ A ¿ care îndeplinește o condiție dată.
- Pot exista mai multe submulțimi diferite acceptabile (soluții posibile), dintre care una este
considerată soluție optimă, pe baza unui criteriu care trebuie maximizat / minimizat.

De asemenea sunt prezente si operațiile uzuale ale algoritmilor Greedy și anume :


- Alegerea unui element candidat x din mulțimea A
- Verificarea acceptabilității elementului ales: dacă adăugarea elementului la soluția parțială
construită o menține acceptabilă sau o face inacceptabilă
- Adăugarea elementului ales x la soluția parțială, dacă ea rămane acceptabilă.

Putem afirma astfel ca algoritmul lui Kruskal respecta structura unui algoritm general Greedy și
anume:
- Se primește mulțimea A cu n elemente
- Se inițializează soluția B ca mulțime vidă
- Se repetă de (maxim) n ori:
 alege un element candidat x din mulțimea A
 verifică dacă B∪ { x } este soluție parțială acceptabilă
 dacă da, adaugă x la mulțimea B: B=B ∪ { x }
- se trimite mulțimea B ca soluție