Sunteți pe pagina 1din 11

3.

Metoda Greedy -----------------------------------------------------------------------------------------------------------------------

Unitatea de nvare Nr. 3


METODA GREEDY

Cuprins
Introducere .......................................................................................................................... 2 3.1. Memorarea textelor pe band ....................................................................................... 3 3.2. Problema continu a rucsacului .................................................................................... 4 3.3. Problema arborelui parial de cost minim ...................................................................... 6 3.4. Comentarii i rspunsuri la testele de autoevaluare ................................................... 10 3.5. Lucrare de verificare pentru studenicontiunu a rucsacului ....................................... 11 3.6. Bibliografie. ................................................................................................................. 11

Obiectivele Unitii de nvare nr. 3


Dup ce vei parcurge aceast unitate de nvare, vei reui s: stpnii o metod de programare pentru probleme de minim; delimitai exact care este cadrul de aplicativitate al metodei i de ce nu poate fi extins la probleme foarte puin diferite; nelegei necesitatea demonstrrii validitii algoritmilor elaborai prin metoda Greedy.

Indicaii metodice pentru unitatea de nvare nr. 3


Materialul trebuie parcurs n ordinea sa fireasc, prezentat n continuare. Se recomand conspectarea i notarea ideilor principale, repcum i consultarea bibliografiei pentru detalii i informaii suplimentare. Timpul minim pe care trebuie s-l acordai acestei uniti de nvare este de 4 ore.

-------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 1

3. Metoda Greedy ------------------------------------------------------------------------------------------------------------------------

Introducere
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:
p()= 1 p:P(A){0,1} cu p(X) p(Y), Y X

O submulime SA se numete soluie dac p(S)=1. Dintre soluii aleg una care optimizeaz o funcie p: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:
S for i=1,n xalege(A); AA\{x} if p(S{x})=1 then SS{x} prel(A) S for i=1,n if p(S{ai}) then SS{ai}

Observaii: n algoritm nu apare funcia f !! timpul de calcul este liniar (exceptnd prelucrrile efectuate de procedurile prel i alege); 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}. Se caut submulimea a crei sum a elementelor este maxim. Vom parcurge mulimea i vom selecta numai elementele pozitive.
k0 for i=1,n if ai>0 then kk+1; skai write(s)

-------------------------------------------------------------------------------------------------------------------2 Tehnici avansate de programare

3. Metoda Greedy ----------------------------------------------------------------------------------------------------------------------Exemplul 2: Caut cel mai scurt ir cresctor cu elemente din mulimea {a1,...,an}. ncepem prin a ordona cresctor elementele mulimii (corespunztor procedurii prel). Apoi:
k1; s1a1; lung1; baza1 for i=2,n if ai>sk then kk+1; sk ai else if k>lung then lungk; bazai-k k1; s1ai Astfel, dac n urma ordonrii a rezultat a=(1,1,2,3,4,4,5,6,7,8,8},

vom obine succesiv:


baza=1; lung=1; s=(1) baza=2; lung=4; s=(1,2,3,4) baza=6; lung=5; s=(4,5,6,7,8).

(Contra) Exemplul 3: Fie mulimea A={a1,...,an} cu elemente pozitive. Caut submulimea de sum maxim, dar cel mult egal cu M dat. Dac procedez ca n exemplul 1, pentru A=(6,3,4,2) i M=7 obin {6}. Dar soluia optim este {3,4} cu suma egal cu 7.

3.1. Memorarea textelor pe band


Textele 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). 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)= S
1 n Tp(k). n k=1

observm c funcia T se mai poate scrie: 1 n T(p)= (n k + 1)L(pk ) n k=1 (textul de pe poziia k este citit dac vrem s citim unul dintre textele de pe poziiile k,...,n). Conform strategiei Greedy, ncepem prin a ordona cresctor vectorul L. Rezult c n continuare L(i)<L(j), i<j. Demonstrm c n acest mod am obinut modalitatea optim, adic permutarea identic minimizeaz funcia de cost T.

-------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 3

3. Metoda Greedy -----------------------------------------------------------------------------------------------------------------------Fie pSn optim, adic p minimizeaz funcia T. Dac p este diferit de permutarea identic i<j cu L(pi)>L(pj):
p=( pi pj )

Considerm permutarea p' n care am interschimbat elementele de pe poziiile i i j:


p'=( pj pi )

Atunci 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)+(i-j)L(pj) = = (j-i)[L(pi)-L(pj)]>0, ambii factori

fiind

pozitivi. Rezult c T(p)<T(p). Contradicie.

3.2. 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. Se cere o modalitate de ncrcare de (fraciuni de) obiecte n rucsac, astfel nct ctigul total s fie maxim.
xi [0,1],i Prin soluie nelegem un vector x=(x1,,xn) cu n gi x i G i=1

O
n i=1

soluie

optim

este

soluie

care

maximizeaz

funcia

f(x)= cixi .

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

(*)

Algoritmul const n ncrcarea n aceast ordine a obiectelor, atta timp ct nu se depete greutatea G (ultimul obiect pote fi eventual ncrcat parial): -------------------------------------------------------------------------------------------------------------------4 Tehnici avansate de programare

3. Metoda Greedy -----------------------------------------------------------------------------------------------------------------------

G1 G { G1 reprezint greutatea disponibil } for i=1,n if giG1 then 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). Artm c soluia astfel obinut este optim.
n giy i = G Fie y soluia optim: y=(...,yk,...) cu i=1 n c y maxim i i i=1 Dac yx, fie k prima poziie pe care ykxk.

Observaii:
kj: pentru k>j se depete G. yk<xk: pentru k<j: evident, deoarece xk=1; pentru k=j: dac yk>xk se depete G.

Considerm soluia: y=(y1,,yk-1,xk,yk+1,, yn) cu <1 (primele k-1 componente coincid cu cele din x). Pstrez greutatea total G, deci: gkxk+(gk+1yk+1+...+gnyn)=gkyk+gk+1yk+1+...+gnyn. Rezult:
gk(xk-yk)=(1-)(gk+1yk+1++gnyn) (**) Compar performana lui y' cu cea a lui y: f(y)-f(y) = ckxk +ck+1yk+1 +...+ cnyn - (ckyk+ck+1yk+1 +...+cnyn) = ck(xk-yk) + (-1)(ck+1yk+1+...+cnyn) = = ck/gk[gk(xk-yk)+(-1)(gk/ckck+1yk+1+...+gk/ckcnyn)] Dar -1>0 i gk/ck gs/cs, s>k.

Atunci
f(y)-f(y)>ck/gk [gk(xk-yk)+(-1)(gk+1yk+1+...+gnyn)]=0, deci f(y')>f(y). Contradicie.

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.

-------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 5

3. Metoda Greedy ------------------------------------------------------------------------------------------------------------------------

3.3. Problema arborelui parial de cost minim


Fie G=(V,M) un graf neorientat cu muchiile etichetate cu costuri strict pozitive. Se cere determinarea unui graf parial de cost minim. Ca exemplificare, s considerm n orae iniial nelegate ntre ele. Pentru fiecare dou orae se cunoate costul conectrii lor directe (considerm acest cost egal cu + dac nu este posibil conectarea lor). Constructorul trebuie s conecteze oraele astfel nct din oricare ora s se poat ajunge n oricare altul. Ce legturi directe trebuie s aleag constructorul astfel nct costul total al lucrrii s fie minim? Este evident c graful parial cutat este un arbore (dac ar exista un ciclu, am putea ndeprta orice muchie din el, cu pstrarea conexitii i micorarea costului total). Vom aplica metoda Greedy: adaug mereu o muchie de cost minim dintre cele nealese i care nu formeaz un ciclu cu precedentele muchii alese. Acest algoritm poart numele de algoritmul lui Kruskal. Ca de obicei, fie |V|=n, |M|=m. Vor fi alese deci n-1 muchii. Construim o matrice mat cu m linii i n coloane. Pe fiecare linie apar extremitile i i j ale unei muchii, precum i costul acestei muchii. ncepem prin a ordona liniile matricii cresctor dup ultima coloan (a costurilor muchiilor). Exemplul 4: Considerm graful de mai jos i matricea mat ataat.

1 3 5 2

2 5 2

2 5 3 4 4 1 1 4 1 3 2 3 2 4 5 5 4 5 5 2 2 2 3 4 5 5

Conform algoritmului lui Kruskal, vor fi alese n ordine muchiile: (1,2), (1,4), (4,5), (3,4) cu costul total egal cu 10. Muchia (1,5) nu a fost aleas deoarece formeaz cu precedentele un ciclu. Dificultatea principal const n verificarea faptului c o muchie formeaz sau nu cu precedentele un ciclu. Plecnd de la observaia c -------------------------------------------------------------------------------------------------------------------6 Tehnici avansate de programare

3. Metoda Greedy ----------------------------------------------------------------------------------------------------------------------orice soluie parial este o pdure, vom asocia fiecrui vrf i un reprezentant ri care identific componenta conex (arborele) din care face parte vrful n soluia parial. Atunci: - o muchie (i,j) va forma un ciclu cu precedentele ri=rj; - la alegerea (adugarea) unei muchii (i,j) vom pune rkrj pentru orice vrf k cu rk=ri (unim doi arbori, deci vrfurile noului arbore trebuie s aib acelai reprezentant). n algoritmul care urmeaz metoda descris, l este numrul liniei curente din matricea mat, nm este numrul de muchii alese, iar cost este costul muchiilor alese
ri i, i=1,n l 1; nm 0; cost 0 while lm & nm<n-1 i1 mat(l,1); i2 mat(l,2) r1 ri1; r2 ri2 if r1r2 then nm nm+1; cost cost+mat(l,3); write(i1,i2) for k=1,n if rk=r2 then rk r1 l l+1 if nm<n-1 then write('Graf neconex') else write('Graf conex. Costul=,cost)

Demonstrm n continuare corectitudinea algoritmului lui Kruskal. Fie G=(V,M) un graf conex. Mulimea PM se numete mulime promitoare de muchii dac nu conine cicluri i poate fi extins la un arbore parial P de cost minim. Propoziia 1: Fie P promitoare i YV astfel nct nici un vrf din Y nu este extremitate a unei muchii din P. Fie m una dintre muchiile de cost minim cu cel puin o extremitate n Y. Atunci P{m} este promitoare. Fie P arborele parial de cost minim la care poate fi extins P.
P Y

Dac mP , O.K. Dac mP, atunci P{m} are un ciclu. n el exist, n afar de m, o alt muchie m' adiacent lui Y. -------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 7

3. Metoda Greedy -----------------------------------------------------------------------------------------------------------------------Fie P'=P {m}\{m}. Observm c P{m}P' pentru c PP. P' este de cost minim deoarece costul lui m este mai mic sau egal cu costul lui m'. Rezult c mulimea de muchii P{m} este promitoare. Propoziia 2: Arborele furnizat de metoda Kruskal este arbore parial de cost minim. Artm prin inducie c dup k=0,1,...,n-1 pai, cele k muchii alese formeaz o mulime promitoare. Pentru k=0 rezultatul este evident. Fie P mulimea promitoare a muchiilor selectate la primii k pai. Fie Y=V\{x | x extremitate a unei muchii din P} = mulimea punctelor izolate. Conform Propoziiei 1, mulimea P{muchia selectat la pasul k+1} este promitoare. n final, o mulime promitoare cu n-1 muchii este chiar un arbore parial de cost minim.

Tema de autoinstruire nr. 1 Consultai bibliografia pentru: 1. a cunoate un alt algoritm pentru problema arborelui parial de cost minim, numit algoritmul lui Prim; 2. a demonstra validitatea acestui algoritm; 3. a compara eficiena algoritmilor datorai lui Kruskal i Prim.

-------------------------------------------------------------------------------------------------------------------8 Tehnici avansate de programare

3. Metoda Greedy ----------------------------------------------------------------------------------------------------------------------Testul de autoevaluare nr. 1 1. Care este clasa de probleme pentru care se poate aplica metoda Greedy?

Rspunsurile la test se vor da n spaiul liber din chenar, n continuarea enunurilor

2.

Unde apare funcia de cost n schema general de rezolvare?

3.

De ce anume depinde eficiena metodei Greedy ?

4.

Care este esena algoritmului lui Prim ?

5.

Urmrii pe exemplul de mai sus care sunt muchiile alese de algoritmul lui Prim.

Rspunsurile la acest test se gsesc pe pagina urmtoare.

-------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 9

3. Metoda Greedy ------------------------------------------------------------------------------------------------------------------------

3.4. Comentarii i rspunsuri la testele de autoevaluare


Testul 1. 1. Metoda Greedy este aplicabil problemelor de optim (minim i maxim). 2. Funcia de cost ce trebuie optimizat apare n procedurile alege, respectiv prel,n procedurile alege, respectiv prel, din cele dou variante de aplicare a metodei Greedy. 3. Eficiena metodei Greedy depinde de asemenea de eficiena procedurilor alege, respectiv prel, n rest timpul fiind liniar. 4. Algoritmul lui Prim, care const n urmtoarele: se ncepe prin selectarea unui vrf; la fiecare pas aleg o muchie (i,j) de lungime minim cu i selectat, dar j neselectat. Propunem ca exerciiu demonstrarea faptului c dup n-1 pai se obine un arbore parial de cost minim. 5. Dac pornim cu vrful 5, ordinea de alegere a muchiilor este urmtoarea: (5,4), (4,1), (1,2), (3,4).

-------------------------------------------------------------------------------------------------------------------10 Tehnici avansate de programare

3. Metoda Greedy -----------------------------------------------------------------------------------------------------------------------

3.5. Lucrare de verificare pentru studeni

Scriei cte un program ce folosete metoda Greedy pentru cele trei probleme de mai jos: 1. S se interclaseze n vectori ordonai, obinnd un singur vector ce conine toate elementele vectorilor iniiali. 2. Se d o mulime de perechi de nume de persoane cu proprietatea c ntre dou persoane dintr-o pereche exist o legtur de rudenie direct. S se listeze grupele de persoane ntre care exist o legtur de rudenie direct sau indirect. 3. Se dau orele de nceput i sfrit a n spectacole ce pot fi programate ntr-o sal. Se cere s determinm numrul maxim de spectacole ce pot fi programate fr a avea loc suprapuneri. Rezolvrile, dar i dificultile ntmpinate, vor fi expediate prin mail tutorelui.

3.6. Bibliografie
[1] Georgescu Horia, Tehnici de programare, Editura Universitii Bucureti, 2005 [2] Cormen T. H. et al. Introducere n algoritmi, Computer Libris Agora, 2000 [3] Parberry Ian, Gasarch William, Problems on Algorithms (2nd Edition), 2002 [4] Cormen T. H. et al. Introducere n algoritmi, Computer Libris Agora, 2000 [5] Skiena Steven, The Algoritm Design Manual, Springer 1998

-------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 11

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