Sunteți pe pagina 1din 6

1

Metoda Greedy
Prezentare [1]
Metoda Greedy (greedy=lacom) este aplicabil problemelor de optim.
Cadru: Se d o mulime finit A.
S se determine o submulime finit BA care satisface anumite condiii (este soluie
posibil) + ndeplinete un criteriu de optim (este soluie optim).
Soluiile posibile au proprietile
este soluie posibil
Dac B este soluie posibil i C B, atunci C este soluie posibil
Formal: Considerm mulimea finit A={a1,...,an} i o proprietate p definit pe mulimea
submulimilor lui A (notat P(A)):
p() 1
p:P(A){0,1} cu
p(X) p(Y), Y X
O submulime S A se numete soluie dac p(S)=1.
Dintre soluii dorim s alegem una care optimizeaz o funcie f:P(A)R dat.
Metoda urmrete evitarea parcurgerii tuturor submulimilor (ceea ce ar necesita un
timp de calcul exponenial), mergndu-se "direct" spre soluia optim. Se ncearc o
construire direct a unei soluii optime, element cu element (elementul ales la un pas pentru a
se aduga n soluie este cel care pare cel mai bun la acel pas, conform criteriului de
optim). Nu este ns garantat obinerea unei soluii optime; de aceea aplicarea metodei
Greedy trebuie nsoit neaprat de o demonstraie.
Distingem dou variante generale de aplicare a metodei Greedy:
fr prelucrare iniial - elementul care se adaug la soluie se stabilete la fiecare pas,
n funcie de alegerile anterioare
cu prelucrare iniial - ordinea n care sunt considerate elementele se stabilete de la
nceput

Fr prelucrare iniial Cu prelucrare iniial


S prel(A)
for i=1,n S
xalege(A); for i=1,n
AA\{x} if p(S{ai})=1
if p(S{x})=1 SS{ai}
SS{x}

Observaii:
- n algoritm nu apare funcia f
- dificultatea const n a concepe procedurile alege, respectiv prel, n care este
"ascuns" funcia f.

Exemplul 1 Se consider mulimea de valori reale A={a1,...,an}. S se determine o


submulime a lui A a crei sum a elementelor este maxim.
Soluie. Vom parcurge mulimea i vom selecta numai elementele pozitive. Dac nu exist
elemente pozitive, soluia este dat de cel mai mare element din mulime. Corectitudinea
soluiei este evident.
2
Exemplul 2 (Contraexemplu) Se consider mulimea A={a1,...,an} cu elemente pozitive.
S se determine o submulime a lui A de sum maxim, dar cel mult egal cu o valoare M
dat.
Dac alegem la fiecare pas cel mai mare element care poate fi adugat la soluie fr a
depi M, pentru A={6,3,4,2} i M=7 obinem {6}. Dar soluia optim este {3,4} cu suma
egal cu 7.

Continum cu prezentarea unor exemple clasice.

Problema selectrii activitilor (problema spectacolelor) [2]

S presupunem c avem o mulime S={1, 2,, n} de n activiti (spectacole)


care doresc s foloseasc aceeai resurs (sala de spectacole). Aceast resurs poate fi folosit
de o singur activitate la un moment dat. Fiecare activitate i are un timp de start si i un timp
de terminare ti. Problema selectrii activitilor (spectacolelor) const n selectarea unei
mulimi de activiti compatibile ntre ele de cardinal maxim (compatibile = avnd intervalele
de desfurare disjuncte).
Variant de enun: tiind intervalele de desfurare a unor conferine la care dorim s
asistm n timpul unei zile (sau emisiuni pe care dorim sa le vizionm), s se determine
numrul maxim de conferine la care putem participa (= cu intervale de desfurare disjuncte).
Soluie. Strategia Greedy pentru rezolvarea acestei probleme este urmtoarea: la fiecare pas
este selectat o activitate nou care se termin cel mai devreme (cu timpul de terminare cel
mai mic) compatibil cu activitile deja selectate. Pentru aceasta vom ordona activitile
cresctor dup timpul de terminare.
S presupunem c activitile sunt ordonate cresctor dup timpul de terminare: t1
t2 ... tn
Algoritmul Greedy este descris de urmtoarea funcie, scris n pseudocod.
function selectie_activitati(s, t)
AS {1}
uas 1
for ac = 2,n
if sac tuas
AS AS {ac}
uas ac
return AS
n mulimea AS se introduc activitile care au fost selectate. Variabila uas indic
ultima activitate introdus n AS.
Deoarece activitile sunt considerate n ordinea cresctoare a timpilor lor de
terminare, tuas va reprezenta timpul maxim de terminare a oricrei activiti din AS:
tuas = max{ tk , kAS}
De aceea, pentru a vedea dac activitatea curent ac este compatibil cu toate celelalte
activiti existente la momentul curent n AS este suficient ca sac tuas.
3
Corectitudine. Presupunem (ca i n algoritm) c activitile sunt ordonate cresctor dup
timpul de terminare: t1 t2 ... tn. Fie AS = {g1=1, ,gt} (cu g1 < < gt) soluia Greedy.
Varianta 1 [2]:
Considerm o soluie optim O = {o1, ,op} (cu activitile notate astfel nct o1< < op,
deci to1 top) care are un numr maxim de elemente iniiale n comun cu soluia
Greedy AS. Avem t p. Presupunem O AS.
Atunci exist un indice k t astfel nct gk ok, altfel am avea g1 = o1, , gt = ot, adic AS
O i t < p. Dar, deoarece activitatea ot+1 este compatibil cu toate activitile din {o1, ,ot} =
{g1, ,gt}, algoritmul selectie_activitati ar mai fi avut activiti compatibile cu {g1,
,gt} din care s selecteze, deci ar fi furnizat o soluie cu mai multe elemente.
Fie k t cel mai mic indice astfel nct gk ok (prima poziie pe care soluia greedy AS i
soluia optim O difer). La pasul la care selectie_activitati a ales activitatea gk,
activitatea ok era de asemenea neselectat i compatibil cu activitile deja selectate g1 = o1,
,gk-1 = ok-1. Deoarece activitatea gk a fost cea selectat, rezult c tgk tok (gk a fost
selectat deoarece avea timpul de terminare mai mic), deci gk este compatibil cu ok+1, , ot
(deoarece acestea ncep dup ce se termin ok) v. desenul de mai jos:
tgk tok sok+1 tok+1 sop top
Atunci putem nlocui n soluia optim O activitatea ok cu gk i obinem tot o soluie posibil
O' = O {ok} {gk } (format din activiti compatibile din S). Avem |O'| = |O|, deci O' este
tot o soluie optim, dar care are mai multe elemente n comun cu soluia greedy AS,
contradicie.
AS:
g1 =1 gk-1 gk gk+1 gt

O:
g1 gk-1 ok ok+1 op

O':
g1 gk-1 gk ok+1 op

Varianta 2 (similar) Demonstrm prin inducie dup n c algoritmul greedy


selectie_activitati construiete o soluie optim.
Pentru n = 0, 1 afirmaia este evident.
Fie n 2. Presupunem c algoritmul selectie_activitati construiete o soluie optim
pentru orice mulime de activiti S' cu |S'|<n
Fie S o mulime de n activiti.

a) Exist o soluie optim pentru S care conine activitatea 1 (prima activitate


adugat la soluia AS de algoritmul greedy).
ntr-adevr, fie O = {o1,,op} o soluie optim pentru S (o submulime de cardinal maxim
de activiti compatibile) cu activitile notate astfel nct o1< < op, deci to1 top.
Dac activitatea 1 aparine lui O, atunci afirmaia a) este adevrat. Altfel considerm O' =
O {o1} {1}. Deoarece t1 to1, activitatea 1 este compatibila cu toate celelalte activiti
4
din O {o1}, deci O' este o submulime de activiti compatibile cu |O'|=| O|, adic o
soluie optim care conine activitatea 1.
b) Fie S' = { kS, sk t1 } mulimea activitilor care ncep dup ce se termin
activitatea 1 (compatibile cu activitatea 1). Conform ipotezei de inducie soluia construit
de algoritmul selectie_activitati pentru S', anume AS' = AS {1}, este soluie
optim pentru S'. Rezult c AS = AS' {1}este soluie optim pentru S (altfel, conform
punctului a) ar exista o soluie optim O pentru S care conine activitatea 1 cu cardinal mai
mare dect AS: |O| > | AS|; dar atunci O - {1} este soluie posibil pentru S' cu |O - {1} | >
|AS {1}| = | AS'|, ceea ce contrazice optimalitatea lui AS')

1 soluia pentru S'


Variante. Generalizri
1. Problema partiionrii intervalelor ( - programarea tuturor activitilor folosind un
numrului minim de resurse = partiionarea unei mulimi de intervale ntr-un numr
minim de submulimi de intervale disjuncte dou cte dou -v. laborator, seminar, [2])
2. Cazul n care fiecare interval are asociat o pondere (un profit asociat activitii) i se
cere determinarea unei submulimi de intervale disjuncte de pondere maxim la
programare dinamic

Memorarea textelor pe band


n texte cu lungimile L(1),...,L(n) urmeaz a fi aezate pe o band. Pentru a citi
textul de pe poziia k, trebuie citite textele de pe poziiile 1,2,...,k (conform specificului
accesului secvenial pe band). S se determine o modalitate de aezare a textelor pe band
astfel nct timpul mediu de acces s fie minimizat.

Variant de enun: Care este ordinea de execuie a unor comenzi cu durate de execuie
cunoscute astfel nct s se minimizeze timpul total de ateptare al clienilor pentru finalizarea
execuiei tuturor comenzilor ( = suma timpilor de ateptare pentru finalizarea fiecrui
proiect/activitate)

Soluie. O soluie nseamn o permutare pSn.


Pentru o astfel de permutare (ordine de aezare a textelor pe band), timpul pentru a
citi textul de pe poziie k este: Tp(k)=L(p1)+...+L(pk). Presupunnd textele egal
1 n
probabile, trebuie minimizat valoarea T(p) Tp(k).
n k1
S observm c funcia T se mai poate scrie:
1 n
T(p) (n k 1)L(pk )
n k1

Conform strategiei Greedy, ncepem prin a ordona cresctor vectorul L. Renumerotm


textele astfel nct L(1) L(2) L(n). Astfel, n continuare L(i)L(j),i<j.
5
Corectitudine [1] Idee (detalii la curs):
Fie pSn optim, adic p minimizeaz funcia T. Presupunem c i<j cu L(pi)>L(pj) (o
inversiune). Considerm permutarea p' n care am interschimbat elementele de pe poziiile i
i j (este suficient s considerm j=i+1).
p=( pi pj )

p'=( pj pi )

Atunci, folosind formulele pentru T(p) i T(p) i reducnd termenii n diferena T(p)-
T(p) obinem
n[T(p)-T(p)] = (n-i+1)L(pi) + (n-j+1)L(pj) -
- (n-i+1)L(pj) - (n-j+1)L(pi) =
= (j-i)[L(pi)-L(pj)]>0,
Contradicie.

Variante. Generalizri (v. laborator+seminar)


1. Fiecare text are asociat o frecven de citire
2. Avem la dispoziie p benzi (p>=1)

Problema continu a rucsacului [1]

Se consider un rucsac de capacitate (greutate) maxim G i n obiecte caracterizate


prin:
- greutile lor g1,...,gn;
- ctigurile c1,...,cn obinute la ncrcarea lor n totalitate n rucsac.
Din fiecare obiect poate fi ncrcat orice fraciune a sa.
S se determine o modalitate de ncrcare de (fraciuni de) obiecte n rucsac, astfel
nct ctigul total s fie maxim.

Variant de enun: T=timp total de funcionare a unei resurse, n activiti cu durata di i


profitul pi. O activitate nceput poate fi ntrerupt obinndu-se un profit parial.
xi [0,1],i
n
Soluie [1]. Prin soluie nelegem un vector x=(x1,,xn) cu
gi xi G
i1
n
O soluie optim este soluie care maximizeaz funcia f(x) cixi .
i1

Dac suma greutilor obiectelor este mai mic dect G, atunci ncrcm toate
obiectele: x=(1,...,1). De aceea presupunem n continuare c g1+...+gn>G.
Conform strategiei Greedy, ordonm obiectele descresctor dup ctigul la unitatea
de greutate, deci lucrm n situaia:
c1 c2 c
... n (*)
g1 g2 gn

Algoritmul const n ncrcarea n aceast ordine a obiectelor, atta timp ct nu se


depete greutatea G (ultimul obiect poate fi eventual ncrcat parial):
6
G1 G { G1 reprezint greutatea disponibil }
for i=1,n
if giG1
xi1; G1G1-gi
else
xiG1/gi;
for j=i+1,n
xj 0
stop
write(x)
Am obinut deci x=(1,...,1,xj,0,...,0) cu xj[0,1).

Corectitudine [1]. vezi curs. Idee: Artm c soluia astfel obinut este optim.
Fie y soluia optim care are o subsecven iniial maxim n comun cu x:
n
giy i G
i1
y=(...,yk,...) cu
n
c y maxim
i1 i i
Dac yx, fie k prima poziie pe care ykxk. Atunci avem
kj: pentru k>j se depete G.
yk<xk
Considerm soluia: y=(y1,...,yk-1,xk,yk+1,..., yn) cu <1
(primele k-1 componente coincid cu cele din x). Pstrm greutatea total G, deci:
gk(xk-yk)=(1-)(gk+1yk+1++gnyn) (**)

Comparm performana lui y' cu cea a lui y:


f(y)-f(y)= ck/gk[gk(xk-yk)+(-1)(gk/ckck+1yk+1+...+gk/ckcnyn)]

gk g j g g
Din alegerea Greedy pentru j>k . nlocuind k cu j pentru j>k i folosind (**)
ck c j ck cj
rezult f(y)-f(y) 0, deci f(y') f(y). Deoarece y este optim, rezult c f(y') =
f(y). Contradicie, y are mai multe elemente iniiale n comun cu x dect y .

Variante. Generalizri
Problema discret a rucsacului difer de cea continu prin faptul c fiecare obiect
poate fi ncrcat numai n ntregime n rucsac.
S observm c aplicarea metodei Greedy eueaz n acest caz. ntr-adevr, aplicarea
ei pentru: G=5, n=3 i g=(4,3,2), c=(6,4,2.5)
are ca rezultat ncrcarea primul obiect; ctigul obinut este 6. Dar ncrcarea ultimelor dou
obiecte conduce la ctigul superior 6.5.

Bibliografie
1. Horia Georgescu. Tehnici de programare. Editura Universitii din Bucureti 2005
2. Jon Kleinberg, va Tardos - Algorithm Design, 2005 Addison-Wesley Professional
http://www.cs.princeton.edu/~wayne/kleinberg-tardos

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