CATEGORII DOCUMENTE |
Metoda Greedy
1. Descrierea metodei:
Metoda Greedy este o metoda generala de proiectare a algoritmilor care consta in construirea solutiei globale optimale printr-un sir de solutii cu caracter de optim local atunci cind este posibila exprimarea "optimului global" ca o combinatie de o "optime locale".
Schema de proiectare: Problema se prezinta sub forma unei multimi S cu n componente. O parte din submultimile lui S reprezinta solutii care satisfac un anume criteriu si se numesc solutii admisibile. In spatiul solutiilor admisibile prezinta interes o solutie care maximizeaza/minimizeaza o functie obiectiv. Solutiile admisibile au proprietatea ca odata cu o solutie admisibila toate submultimile sale sint de asemenea admisibile. Metoda Greedy sugereaza un algoritm de constructie a solutiei optimale pas cu pas pornind de la multimea vida. La fiecare pas se selecteaza un element nou care va fi "inghitit" in solutie (greedy) in baza unei proceduri de selectie. De exemplu la problemele de optimizare procedura de selectie alege acel element care face sa creasca cel mai mult valoarea functiei obiectiv. Desigur nu in toate problemele, aceasta strategie conduce la solutia optima, metoda Greedy nefiind o metoda universala.
2. Modelul matematic:
Fie S o multime finita de intrari si C o colectie de submultimi ale lui S. Spuneme ca C este admisibila daca satisface axioma de admisibilitate:
X I C: X T xIX: X (x) I C)
Daca C este admisibila atunci perechea (S,C) se numste sistem admisibil. O submultime XIC se numeste baza daca este maximala ( nu exista xIS X astefel incit X I C. Clasa de probleme pentru care se pot defini algoritmi greedy este definita de urmatoarea schema:
Se considera date un sistem admisibil (S,C) si o functie obiectiv f:C R.
Se cere determinarea determinarea unei baze B I C. care satisface:
f(B) = optim
In general prin optim se va intelege minim sau maxim. Strategia "greedy" ("lacom") consta in gasirea unui criteriu de selectie a elementelor din S care candideaza la formarea bazei optime, numit criteriu de selectie greedy sau criteriu de selectie locala sau optim local.
Schema strategiei greedy este urmatoarea:
// Initial
S1 = S;
B =
repeat
// pasul de selectie greedy
alege x din S1 conform unui criteriu de optim local ;
S1 = S1 - ;
daca B este in C atunci B = B
// Conditia de terminare
until (nu se mai pot adauga elemente din S1 la B)
Obs. In studiile teoretice, optimul local are o definitie exacta:
f(B ) = optim ) | y I S1}
In practica construirii de algorimi greedy, este recomandabil sa fie lasata libera definitia optimului local. Exista totusi restrictia ca definitia acestuia sa nu depinda de alegerile ulterioare sau de solutiile subproblemelor. In schimb poate depinde de selectiile facute la acel moment. In acest fel se obtine o flexibilitate mai mare in proiectarea de algoritmi greedy dar de fiecare data trebuie demonstrat ca selectia conform optimului local conduce la o baza pentru care se obtine optimul global pentru functia obiectiv.
Din pacate numai conditia de admisibilitate nu asigura existenta unui crieriu de selectie locala care sa conduca la determinarea unei baze optime. Aceasta inseamna ca pentru anumite probleme algoritmii greedy nu construiesc o solutie optima ci numai o baza pentru care functia obiectiv poate avea valori apropiate de cea optima. Acesta este cazul unor probleme NP-complete.
Eficienta metodei (complexitatea):
Se presupune ca pasul de alegere greedy selectioneaza elemente x in O(kp) timp unde k = S1 iar testarea conditiei B IC necesita O(lq) timp, l = B, k + l n . De asemenea se presupune ca operatiile B si S - necesita O(1) timp. Rezulta:
T(n)= O(np +1q) + . + O(1p + nq ) = O(1p +.+ np + 1q + . + nq)= O(np+1 + nq+1 ) = O(nmax(p+1, q+1))
3. Probleme
3.1. Interclasare optimala
Problema Avem secventele X1,X2,..Xn fiecare sortate.Sa se gaseasca o strategie de interclasare doua cate doua astfel incat numarul de operatii sa fie minim.
Exemplu: Fie urmatoarele secvente X1, X2, X3 unde
X1 are 30 elem.
X2 are 20 elem.
X3 are 10 elem.
Se aplica citeva variante de organizare a interclasarii
Y=merge(X1,X2) 50 operatii Y-50 elem.
Z=merge(Y,X3) 60 operatii
----- ----- -----
110 operatii
2. Y=merge(X2,X3) 30 operatii Y-30 elem.
Z=merge(Y,X1) 60 operatii
----- ----- -----
90 operatii
Solutia: Problema se rezolva aplicind o tehnica Greedy la fiecare pas cind se interclaseaza cele mai mici 2 secvente. Problema se poate reprezenta ca un arbore binar.
Exemplu
95 y4
y2 35 60 y3
y1 15 x1 20 30 x5 30 x2
5 10
x4 x3
X3,X4 -> Y1 -15 elem.
X1,Y1 -> Y2 -35 elem.
X2,X5 -> Y3 -60 elem
Y3,Y2 -> Y4 -95 elem.
205 elem.
Nodul x4 este la distanta 3 de nodul y4, deci valoarea din x4 se va aduna de 3 ori.
Daca notam di distanta de la radacina la nodul frunza xi si cu qi valoarea nodului, atunci
di = level ( qi ) - 1
nr. total operatii
5*3 + 10*3 + 20*2 + 30*2 + 30*2 = 15 + 30 +40 + 60 + 60 = 205
S = se numeste lungimea drumurilor externe ponderate ale arborelui
O interclasare optimala corespunde construirii unui arbore binar optimal relativ la S.
Algoritm pentru construirea unui arbore binar optimal
tree ( L,n )
return (least(L))
}
Teorema 1 Fie algoritmul tree si L continand initial arbori cu un nod de valori ( q1, q2, qn ). Atunci tree genereaza un arbore binar cu S = minima ( di distanta de la radacina la nodul qi )
Demonstratie . Demonstratia se face prin inductie dupa n
1. n = 1 evident , arbore minimal
2. P(n-1) : Pentru orice secventa initiala de valori nod ( q1, q2, qm ), 1 m n-1 tree genereaza un arbore Tam optimal
Presupunem P(n-1) adevarata.
P(n) : Pentru orice secventa initiala de valori nod ( q1, q2, qn ), tree genereaza un arbore Tan optimal
Demonstram P(n) adevarata.
Lema 1 : Fie qi si qj cele mai mici doua valori ale secventei (nodurile care vor fi returnate in prima iteratie a buclei for de functia least ). Fie T un arbore optimal ( nu neaparat cel construit de tree). Fie P nodul interior cel mai indepartat de radacina si presupunem ca descendentii lui P au valorile qk, ql diferite de qi, qj.
(qi qk) si / sau (qj ql) se pot interschimba in arbore T, obtinandu-se un arbore T" care ramane optimal.
Demonstratie:
Fie di distanta de la nodul de valoare qi la radacina
dj distanta de la nodul de valoare qj la radacina
dk distanta de la nodul de valoare qk la radacina
dl distanta de la nodul de valoare ql la radacina
qi
qj
qk ql
S(T) =
Dupa interschimbarea valorilor qi, qk se obtine :
S(T') =
Avem D = S(T') - S(T) = qi(dk-di) - qk(dk-di) = (dk-di) (qi-qk)
= -(dk-di) (qk-qi)
Dar dkdi pentru ca P-ul e mai indepartat S(T')-S(T)0 S(T')S(T)
qkqi pentru ca qi , qj minime T minimal
S(T') = S(T) .
Analog se procedeaza pentru perechea (qj,ql). Se obtine T" pentru care S(T")=S(T).
Revenim la demonstratia P(n) adevarata:
Din Lema anterioara rezulta ca T" este optimal pentru secventa de valori nod ( q1, q2, qn ) si contine nodul P care are in descendenti valorile qi , qj cele mai mici.
Inlocuim subarborele P cu un nod care are valoarea qi+qj .Noul arbore T''' fiind un subarbore al arborelui T" este optimal pentru secventa de valori nord (q1 qi-1 qi+qj qi+1 qj-1 qj+1 qn) deci S(T''') = q1d1+.+qi-1dI-1+ (qi+qj)di+j+ qi+1di+1+.+ qj-1dj-1+ qj+1dj+1+.+ qndn minima
S(T)'' - S(T''') = (qidi+ qjdj ) - (qi+qj)di+j= qi(di-di+j) + qj(dj-di+j)=qi+qj.
Rezulta S(T) = S(T''') + qi+qj
Nodul P este construit de tree in prima iteratie, dupa care in iteratia urmatoare se intra in secventa de valori nod (q1 qi-1 qi+qj qi+1 qj-1 qj+1 qn)
Conform ipotezei inductive algoritmul construieste un arbore optimal Tan-1 pentru secventa de valori nord (q1 qi-1 qi+qj qi+1 qj-1 qj+1 qn) deci S(Tan-1) minima. Rezulta S(Tan-1) = S(T''')
Din modul de constructie a lui Tan-1 si Tan avem S(Tan)-S(Tan-1)=(qidi+ qjdj ) - (qi+qj)di+j= qi(di-di+j) + qj(dj-di+j)=qi+qj .
Rezulta in final S(Tan) = S(Tan-1)+ qi+qr = S(T''') + qi+qj = S(T) deci Tan este optimal.
Complexitatea : Bucla for se executa de n ori .
Functiile least() si insert():
L - lista inlantuita: least() - O(n)
insert() - O(1) tree O(n2)
L - lista inlantuita ordonata: least() - O(1)
insert() - O(n)
L - heap: least() - O(logn) tree O(nlogn)
insert() - O(logn)
Obs. Metoda functioneaza si pentru arbori k-ari ( fiecare nod cu k descendenti )
3.2. Compresiile de date. Arbori Huffman
Problema: Fie J = ( D1, D2, , Dn ) un grup de date, fiecare de lungime l si M un mesaj compus din aceste date .( Exemplu: Di octeti de date si M un fisier ). Se cunoaste ca Di apare in M de qi ori i = 1, n. Sa se construiasca un sistem de coduri binare pentru elementele lui J a.i M sa fie de lungime minima.
Solutia: Se codifica fiecare data Di , i = 1, n cu un numar variabil de biti pe baza unui arbore binar cu arcele etichetate astfel:
0 - pentru arcele de forma ( p, left(p))
1 - pentru arcele de forma ( p, right(p))
Arborele are n noduri terminale cate unul asociat fiecarei date Di. Codul asociat datei Di va fi secventa de biti de biti (0,1) care apar ca etichete pe drumul de la radacina la Di.
Exemplu: D = ( D1, D2, , Dn ) = ( rosu, alb, verde, crem, bleu, galben, negru, maro)
r a v c b g n m
coduri(D) = ( 000, 001, , 111 )
0 1
0 1 0 1
0 1 0 1 0 1 0 1
r a v c b g n m
insa, de asemenea, poate fi si:
coduri(D) = ( 00, 01, 100, 101, 1100, 1101, 11110, 11111)
0 1
0 1 0 1
r a 0 1 0 1
v c 0 1 0 1
b g n m
Obs. Pentru a codifica n obiecte sunt necesare log2n biti
Decodarea: 1. Codurile sunt de aceeasi lungime . Este suficienta o tabela de indirectare.
2. Codurile sunt de lungime variabila. Se foloseste arborele de codare . Aceasta se bazeaza pe faptul ca se obtine un sistem de coduri care sunt 'prefix distinctibile', adica i, j cod(Di) nu este prefix al secventei cod(Dj).
Exemplu: M = 01 1111 00 00 01 01 01 101 1110 1100 00 100 1101 1101
a m r r a a a c n b r v g g
Lungime mesaj:
M = a m r r a a a c n b r v g g
in prima codare: l(M) = 14*3 = 42 biti
in a doua codare: l(M) = 40 biti
Obs. Problema determinarii unei codari care sa minimizeze lungimea lui M se reduce la determinarea unui arbore binar cu lungimea drumurilor externe ponderate minime
Fie M = Di1 Di2 Dik compus din datele (D1, D2, Dn) cu frecventele de aparitii Q = (q1, q2, ,qn) , qi = nr. de aparitii in M a datelor Di, atunci
l(M) = =
dist(Di) - distanta de la radacina la Di
Pentru exemplul anterior:
M = a m r r a a a c n b r v g g ,
D = ( b, m, v, n, c, g, r, a )
Q = ( 1, 1, 1, 1, 1, 2, 3, 4 )
Reyulta M de forma:
M = 00 0101 11 11 00 00 00 100 0111 0100 11 0110 101 101 -- 39 biti
a m r r a a a c n b r v g g
cu desenul din figura urmatoare:
0 1
2 6
0 1 0 1
4 4 3 3
a r
0 1 0 1
2 2 1 2
c g
0 1 0 1
1 1 1 1
b m v n
Obs. - Metoda este eficienta atunci cand frecventa aparitiilor este cunoscuta exact, si nu estimata;
- Ambele procese codor, decodor trebuie sa cunoasca arborele;
- Pastrarea codificarii lui M impreuna cu arborele de decodificare ridica probleme de ineficienta ocuparii spatiului;
- Pentru texte se foloseste un arbore cu qi estimate statistic;
- Exemplu pentru un CD-ROM cu carti inmagazinate - se poate pastra un album 38 frunze ( alfabetul latin , plus semnele de punctuatie );
3.3. Drum minim intr-un graf ( sursa - destinatie )
Problema : Se da G = ( V, E ) un graf, e: E R+ functia de etichetare. Se cere un drum (s = V1V2Vk = d), unde dist(s,d) = minimal.
Obs. : Exista un algoritm care da toate aceste drumuri ( cu inmultire de matrici , de cost O(n3)).
Algoritmul Greedy pentru determinarea drumurilor minime de la nodul i la toate celelalte noduri :
short_path( G, C, s, n )
// C - matrice de cost C(i,j) =
// folosim vectorii dist(1..n) si pred(1..n)
// S - multimea nodurilor atinse
S =
for (i=1; i n; i++)
for (k=2; k n-1; k++)
xVS
S = S
for all yVS
}
return (dist, pred)
}
Teorema 2 Algoritmul obtine drumurile minime de la s la orice nod vV.
Demonstratie:
Demonstram ca nodul care se adauga in linia * are proprietatea ca drumul de lungime minima de la s la u trece numai prin noduri din S.
Presupumen ca exista un alt drum d de lungime mai mica decit dist(u) care contine cel putin un nod wVS : d = (s.w.u) ; lungime(d) < dist(u).
Presupunem ca segmentul d1=(s.w) contine numai noduri din S cu (exceptia lui w). Nu restringem generalitatea deoarece in situatia in care exista mai multe noduri in d care sint din V/S putem alege w in d cu proprietatea de a fi primul nod din V/S in parcurgerea drumului de d de la s la u.
Din lungime(d1) < lungime(d) < dist(u) rezulta ca u nu a fost ales cu dist(u) = min . Ar fi trebuit sa fie ales w.
Deoarece in final toate nodurile vor fi incluse in S rezulta ca drumurile obtinute sint de lungime minima.
Complexitatea: O(n2).
3.4. Problema rucsacului (Knapsack)
Problema Datele problemei sunt:
obiectele: i1 i2 in
greutatile: w1 w2 wn
profiturile: p1 p2 pn
capacitatea: M
Se cere o alegere X = ( x1 , x2 , , xn ) , 0 xi 1, astfel incat
(*) si
- maxim (**)
o solutie admisibila satisface (*).
o solutie optima este admisibila si satisface (**)
Obs. 1. Daca solutia optimala este xi=1, i=1,.,n. Deci problema are sens pentru si astfel conditia de admisibilitate a unei solutii devine .
Un algoritm relativ performant se obtine pornind de la sortarea obiectelor in ordinea descrescatoare a valorilor pi/wi.
greedy_knapsack (P,W,M,n)
// P(1..n) - profiturile
// W(1..n) - greutatile
// M - capacitatea rucsacului
// X(1..n) vectorul solutie
// obiectele sint ordonate astfel incit P(i)/W(i) P(i+1)/W(i+1)
if (i n) X(i) = C/W(i);
return (X)
Teorema 3. Solutia generata de GREEDY_KNAPSACK este optimala.
Demonstratie: Fie X=(x1,x2,.,xn) solutia generata de algoritm. Din modul de constructie rezulta
= M.
Daca X=(1,1,..,1) rezulta X optimala.
Daca X (1,1,..,1) fie j indicele pentru care xi=1, 1 i<j ; 0 xj<1; xi=0 , j<i n . Rezulta = M
Presupunem ca X nu este optimala. Fie Y=(y1,y2,.,yn) o solutie admisibila astfel incit >
Putem presupune ca.
(***) Fie k cel mai mic indice pentru care xk yk. Demonstram yk<xk .
Exista urmatoarele posibilitati:
1. k<j : Atunci xk=1. Dar yk xk deci yk<1. Rezulta yk<xk.
k=j
Daca yj xj atunci M==>M. Imposibil. Deci yj<xj adica yk<xk.
k>j
Imposibil.
Crestem acum yk pina la xk si descrestem yk+1, yk+2, .., yn atit cit este necesar astfel incit
(capacitatea totala ramine M). Se obtine o solutie Z=(z1,z2,.,zn) cu zi=xi , i=1,.,k si ( Suma ponderilor descresterilor yk+1, yk+2, .., yn este egala cu ponderea cresterii lui yk ).
Pentru Z avem :
In relatia anterioara au fost utilizate inegalitatile pi/wi pi+1/wi+1 , i=1.n-1.
Daca Z=X rezulta o inegalitate imposibila : >. Deci presupunerea initala X nu este optimala este falsa.
Daca Z X atunci repetam (***) cu Z in locul lui Y si continuam procesul pina cind obtinem Z = X adica ipoteza X nu este optimala falsa.
Complexitatea: O(n)
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2104
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved