Documente Academic
Documente Profesional
Documente Cultură
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ă).
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}
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