Sunteți pe pagina 1din 3

1.

Tehnica Greedy
Metoda Greedy este una din cele mai directe tehnici de proiectare a
algoritmilor care se aplic la o varietate larg de probleme. n general, aceasta
metod se aplic problemelor de optimizare. Specificul acestei metode const n
faptul ca se construiete soluia optim pas cu pas, la fiecare pas fiind selectat (sau
inghiit) n soluie elementul care pare cel mai bun la momentul respectiv, n
sperana c va duce la soluie optim global.
Se d o mulime A cu n elemente i se cere s se determine o submulime a
sa B care satisface anumite restricii. Aceast submulime se numete soluie
posibil. Se cere s se determine o soluie posibil care fie s maximizeze fie s
minimizeze o anumit funcie obiectiv dat. Aceast soluie posibil se numete
soluie optim.

Metoda Greedy lucreaza n pai astfel:


1. Multimea B este vid la nceput
2. Se alege un element din A care pare a fi soluia optim la pasul i
3. Se verific dac elementul ales poate fi adugat la mulimea soluiilor, dac da
atunci va fi adugat
4. Procedeul continu astfel, repetitiv, pn cnd au fost determinate toate
elementele din mulimea soluiilor

Observaie: Metoda Greedy nu caut s determine toate soluiile posibile ( care ar


putea fi prea numeroase) i apoi s aleag din ele pe cea optim, ci caut s
introduc direct un element x n soluia optim. Acest lucru duce la eficiena
algoritmilor Greedy, nsa nu conduc n mod necesar la o soluie optim i nici nu
este posibil formularea unui criteriu general conform cruia s putem stabili excat
dac metoda Greedy rezolv sau nu o anumit problem de optimizare. Acest
motiv duce la nsotirea fiecrei rezolvri prin metoda Greedy a unei demonstraii
matematice (in general prin inducie).
Tehnica greedy

Algoritmii greedy (greedy = lacom) sunt n general simpli i sunt folosii la


probleme de optimizare, cum ar fi: s se gseasc cea mai bun ordine de executare
a unor lucrri pe calculator, s se gseasc cel mai scurt drum ntr-un graf etc. n
cele mai multe situaii de acest fel avem:

o mulime de candidai (lucrari de executat, vrfuri ale grafului etc)


o funcie care verific dac o anumit mulime de candidai constituie
o soluie posibil, nu neaparat optim, a problemei
o funcie care verific dac o mulime de candidai este fezabil, adic dac este
posibil s completam aceast mulime astfel nct s obinem o soluie posibil, nu
neaprat optim, a problemei
o funcie de selecie care indic la orice moment care este cel mai promitor
dintre candidaii nc nefolosii
o funcie obiectiv care d valoarea unei soluii (timpul necesar executrii tuturor
lucrrilor ntr-o anumit ordine, lungimea drumului pe care l-am gsit etc); aceasta
este funcia pe care urmrim s o optimizm (minimizm/maximizm).

Pentru a rezolva problema noastr de optimizare, cutam o soluie posibil care s


optimizeze valoarea funciei obiectiv. Un algoritm greedy construite soluia pas cu
pas. Iniial, mulimea candidailor selectai este vid. La fiecare pas, ncercm s
adugm acestei mulimi cel mai promitor candidat, conform funciei de selecie.
Dac, dup o astfel de adugare, mulimea de candidai selectai nu mai este
fezabil, eliminm ultimul candidat adugat; acesta nu va mai fi niciodat
considerat. Dac, dup adugare, mulimea de candidai selectai este fezabil,
ultimul candidat adugat va rmne de acum ncolo n ea. De fiecare dat cnd
lrgim mulimea candidailor selectai, verificm dac aceast mulime nu
constituie o soluie posibil a problemei noastre. Dac algoritmul greedy
funcioneaz corect, prima soluie gsit va fi totodat o soluie optim a
problemei. Soluia optim nu este n mod necesar unic: se poate ca funcia
obiectiv s aib aceeai valoare optim pentru mai multe soluii posibile.
Descrierea formal a unui algoritm greedy general este:

function greedy(C)
{C este mulimea candidailor}
S {S este mulimea n care construim soluia}
while not solutie(S) and C do
x un element din C care maximizeaz/minimizeaz select(x)
C C \ {x}
if fezabil(S {x}) then S S {x}
if solutie(S) then return S
else return nu exist soluie

Este de neles acum de ce un astfel de algoritm se numete lacom (am putea s-i
spunem i nechibzuit). La fiecare pas, procedura alege cel mai bun candidat la
momentul respectiv, far s-i pese de viitor i fr s se rzgndeasc. Dac un
candidat este inclus n soluie, el rmne acolo; dac un candidat este exclus din
soluie, el nu va mai fi niciodat reconsiderat. Asemenea unui intreprinztor
rudimentar care urmarete ctigul imediat n dauna celui de perspectiv, un
algoritm greedy acioneaz simplist. Totui, ca i n afaceri, o astfel de metod
poate da rezultate foarte bune tocmai datorit simplitii ei.

Funcia select este de obicei derivat din funcia obiectiv; uneori aceste dou
funcii sunt chiar identice.
Un exemplu simplu de algoritm greedy este algoritmul folosit pentru rezolvarea
urmtoarei probleme. Sa presupunem c dorim s dm restul unui client, folosind
un numr ct mai mic de monezi. In acest caz, elementele problemei sunt:

candidaii: mulimea iniial de monezi de 1, 5, i 25 uniti, n care


presupunem ca din fiecare tip de moneda avem o cantitate nelimitata
o solutie posibila: valoarea totala a unei astfel de multimi de monezi selectate
trebuie sa fie exact valoarea pe care trebuie sa o dam ca rest
o multime fezabila: valoarea totala a unei astfel de multimi de monezi selectate
nu este mai mare decat valoarea pe care trebuie sa o dam ca rest
functia de selectie: se alege cea mai mare moneda din multimea de candidati
ramasa
functia obiectiv: numarul de monezi folosite in solutie; se doreste minimizarea
acestui numar

Se poate demonstra c algoritmul greedy va gsi n acest caz mereu soluia optim
(restul cu un numr minim de monezi). Pe de alta parte, presupunnd c exist i
monezi de 12 uniti sau c unele din tipurile de monezi lipsesc din mulimea
iniial de candidai, se pot gsi contra exemple pentru care algoritmul nu gsete
soluia optim, sau nu gasete nici o soluie cu toate c exist soluie.

Evident, soluia optim se poate gsi ncercnd toate combinarile posibile de


monezi. Acest mod de lucru necesit nsa foarte mult timp.

Un algoritm greedy nu duce deci intotdeauna la soluia optim, sau la o soluie.


Este doar un principiu general, urmnd c pentru fiecare caz n parte s
determinm dac obinem sau nu soluia optim.

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