Sunteți pe pagina 1din 5

FMI- Curs Greedy verman@fmi.unibuc.

ro

Metoda Greedy
Prezentare [1]
Metoda Greedy (greedy=lacom) este aplicabil problemelor de optim.
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. 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/cu prelucrare
iniial:
S
for i=1,n
xalege(A);
AA\{x}
if p(S{x})=1

prel(A)
S
for i=1,n
if p(S{ai})=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.
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.

FMI- Curs Greedy verman@fmi.unibuc.ro

Problema selectrii activitilor (problema spectacolelor)


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).
Soluie. Strategia Greedy pentru rezolvarea acestei probleme este urmtoarea: la fiecare pas
este selectat o activitate nou care se termin cel mai devreme i este compatibil cu
activitile deja selectate. Pentru aceasta vom ordona spectacolele 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.
Corectitudine. Idee: faptul c algoritmul de mai sus construiete o soluie optim poate fi
demonstrat prin inducie, innd cont de urmtoarele observaii.
a) Exist o soluie optim care ncepe cu activitatea 1.
b) Fie A o soluie cu 1 A i S' = { kS, sk t1 } mulimea activitilor care ncep dup
ce se termin 1. Problema se reduce la determinarea unei soluii optime pentru S'
(detalii la curs)
Varianta 2 [2]: Considerm o soluie optim O= {o1, ,op} (cu activitile notate astfel nct
to1<= <= top) care are un numr maxim de elemente iniiale n comun cu soluia Greedy AS
= {g1, ,gk}, k<=p. Deoarece pentru orice i=1,,k avem tgi<=toi (a i-a activitate aleas de
algoritmul Greedy are timpul de terminare mai mic sau egal cu a i-a activitate din soluia
optim), rezult p = k i O=AS (detalii la curs).

FMI- Curs Greedy verman@fmi.unibuc.ro

Variante. Generalizri
1. Problema partiionrii intervalelor (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

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: Comenzi cu timp de execuie date n acelai timp. Se cere o ordine de
executare a comenzilor astfel nct s fie minimizat timpul mediu/total de ateptare al
clienilor
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
probabile, trebuie minimizat valoarea T(p)

1 n
Tp(k).
n k1

S observm c funcia T se mai poate scrie:


T(p)

1 n
(n k 1)L(pk)
n k1

Conform strategiei Greedy, ncepem prin a ordona cresctor vectorul L. Rezult c n


continuare L(i)L(j), i<j.
Corectitudine [1] Idee (detalii la curs):
Fie pSn optim, adic p minimizeaz funcia T. Presupunem c i<j cu L(pi)>L(pj).
Considerm permutarea p' n care am interschimbat elementele de pe poziiile i i j. Atunci
n[T(p)-T(p)] = (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


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.

FMI- Curs Greedy verman@fmi.unibuc.ro

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

Soluie [1]. Prin soluie nelegem un vector x=(x1,,xn) cu n


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):
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
giyi G
y=(...,yk,...) cu i1
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:

FMI- Curs Greedy verman@fmi.unibuc.ro

gk(xk-yk)=(1-)(gk+1yk+1++gnyn)

5
(**)

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)]

Din alegerea Greedy

g
gk g j
g
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
Slideu-rile oficiale pentru aceast carte se pot gsi la
http://www.cs.princeton.edu/~wayne/kleinberg-tardos/pearson/
o versiune mbogit a acestora este accesibil la adresa
http://www.cs.princeton.edu/~wayne/kleinberg-tardos

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