Professional Documents
Culture Documents
de programare Greedy
Iridon Olimpia, IEM, AN I
Considerente generale
Metoda Greedy, denumita si Metoda Optimului Local sau Metoda Trierii,
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, precum:
determinarea celor mai scurte drumuri in grafuri (Dijkstra)
determinarea arborelui minimal de acoperire (Prim, Kruskal)
planificarea activitatilor
problema spectacolelor
problema fractionara a rucsacului,etc.
cautare web
teoria jocurilor
Algoritmii Greedy sunt algoritmi de cautare euristica, folositi in cazurile care
implica gasirea unor solutii pentru probleme ce nu au o rezolvare directa.
Avantaje
Simplitate
Algoritmi Greedy sunt de multe ori mai usor de scris efectiv intr-un limbaj de programare
in comparativ cu alti algoritmi (precum Backtracking) .
Eficien
Algoritmi Greedy pot fi de multe ori implementati mai eficient in comparatie cu alti
algoritmi, in ceea ce priveste timpul efectiv de lucru, de la proiectare la solutia finala,
avand avantajul unui timp polinomial O(n^2).
Dezavantaje
Limitat
Tehnica Greedy ofer o singur soluie - nu dispune de mecanismul ntoarcerii, specific
tehnicii Backtracking
Solutie rapid, dar nu neaprat optim
Algoritmii Greedy nu conduc n mod necesar la o solutie optim, nefiind recomandata o
implementare pe termen lung. Pentru a fi siguri ca solutia generata prin metoda Greedy
Pasi de implementare
Primul pas in rezolvarea unei probleme folosind algoritmi euristici de explorare este definirea
exacta a problemei. O problema este bine definita daca se cunosc urmatorii parametrii:
1. Starea initiala a problemei reprezinta configuratia de plecare.
2. Functie de expandare a nodurilor in cazul general este o lista de perechi (actiune,
stare_rezultat). Astfel, pentru fiecare stare se enumera toate actiunile posibile precum si
starea care va rezulta in urma aplicarii respectivei actiuni.
3. Predicat pentru starea finala functie care intoarce adevarat daca o stare este stare
scop si fals altfel
4. Functie de cost atribuie o valoare numerica fiecarei cai generate in procesul de
explorare. De obicei se foloseste o functie de cost pentru fiecare actiune/tranzitie, atribuind,
astfel, o valoare fiecarui arc din graful starilor.
Sarcina algoritmilor de cautare este de a gasi o cale din starea initiala intr-o stare scop. Daca
algoritmul gaseste o solutie atunci cand multimea solutiilor este nevida spunem ca algoritmul
este complet. Daca algoritmul gaseste si calea de cost minim catre starea finala spunem ca
algoritmul este optim.
Exemplificare
Pasul I
Arad
366
Fagar
as
176
366
1. Stare initiala
Arad
Sibiu
253
Timisoa
ra
329
2. Expandarea nodului
Arad
Zerind
374
Arad
Sibiu
Orade
a
380
Timisoa
ra
329
Ramni
cu
Valcea
193
Zerind
374
3. Expandarea nodului
Sibiu
Timisoa
ra
Zerind
374
329
Arad
366
Sibiu
253
Fagar
as
Orade
a
380
Ramni
cu
Valcea
193
4. Expandarea nodului
Fagaras
Bucure
sti
0
Se observa insa ca acest drum nu este minimal. Desi Fagaras este mai aproape ca distanta
geometrica de Bucuresti, in momentul in care starea curenta este Sibiu alegerea optimala
este Ramnicu-Valcea. In continuare ar fi urmat Pitesti si apoi Bucuresti obtinandu-se un
drum cu 32 km mai scurt.
Arad
2. Expandarea nodului
Arad
Arad
Sibiu
393 = 140 +
253
3. Expandarea nodului
Sibiu
Sibiu
Timisoa
ra
447 = 118 +
329
Arad
366 = 0
+366
Zerind
449 = 75 +
374
Zerind
Timisoa
449 = 75 +
ra
374
447 = 118 +
329
Ramni
Fagar
Orade
cu
Arad
as
a
Valcea
415 = 239 + 671 = 291 +
646 = 280 +
413 = 220 +
176
380
366
193
Arad
Sibiu
Zerind
Timisoa
ra
447 = 118 +
329
Ramni
Fagar
Orade
cu
Arad
as
a
Valcea
646 = 280 + 415 = 239 + 671 = 291 +
413 = 220 +
176
366
380
193
Craio
Pitesti
va
526 = 366 + 417 = 317 +
100
160
449 = 75 +
374
Sibiu
553 = 300 +
253
Arad
Sibiu
Zerind
Timisoa
ra
447 = 118 +
5. Expandarea nodului Fagaras
329
Ramni
Fagar
Orade
cu
Arad
as
a
Valcea
415
=
239
+
646 = 280 +
671 = 291 +
413 = 220 +
176
366
380
193
Sibiu
591 = 338 +
253
Craio
Bucures
Pitesti
va
ti
450 = 450 + 526 = 366 + 417 = 317 +
100
0
160
449 = 75 +
374
Sibiu
553 = 300 +
253
Arad
Sibiu
Arad
Sibiu
Zerind
Timisoa
ra
447 = 118 +
329
Ramni
Fagar
Orade
cu
as
a
Valcea
415 = 239 + 671 = 291 +
413 = 220 +
176
380
193
Craio
Bucures
Pitesti
va
ti
450 = 450 + 526 = 366 + 417 = 317 +
100
0
160
Bucures
ti
418 = 418 + 0
449 = 75 +
374
Sibiu
553 = 300 +
253
Ramni
Craio
cu
va
Valcea
615 = 445 +
607 = 414 + 193
160
Concluzii
Dupa expandarea nodului Fagaras desi exista o solutie in multimea open aceasta
nu este aleasa pentru explorare, precum s-a efectuat cu algoritmul Greedy. Se
va alege Pitesti, intrucat f(nod(Bucuresti)) = 450 > f(nod(Pitesti)) = 417,
semnificatia acestei inegalitati fiind ca e posibil sa existe prin Pitesti un drum
mai bun catre Bucuresti decat cel descoperit pana acum.
Observam ca pasii urmati in algoritmul Greedy sunt considerabil mai putini (4
noduri explorate), comparativ cu A*, unde avem 6 noduri explorate.
Avand in vedere complexitatea algoritmului A*, in practica, poate fi de multe ori
imposibil de rulat datorita dimensiunii prea mari a spatiului de cautare.
Solutia finala a problemei date:
Prin Metoda Greedy, ruta minima Arad-Bucuresti = 450 km
Prin Metoda A*, ruta minima Arad-Bucuresti = 418 km
Astfel, concluzionam ca in cazul de fata, solutia data de algoritmul Greedy este
una completa,dar nu optima.
Metoda Greedy este mai mult o sugestie de rezolvare, avand in vedere ca nu
Bibliografie
V mulumesc!