Documente Academic
Documente Profesional
Documente Cultură
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
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)
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},
(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.
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.
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 )
fiind
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
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.
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.
3. Metoda Greedy ----------------------------------------------------------------------------------------------------------------------Testul de autoevaluare nr. 1 1. Care este clasa de probleme pentru care se poate aplica metoda Greedy?
2.
3.
4.
5.
Urmrii pe exemplul de mai sus care sunt muchiile alese de algoritmul lui Prim.
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