Este o optiune ce tine de specificul problemei cu implicatii asupra
complexitatii. Se bazeaza pe statistica datelor de la intrare din care se extrag caracteristici ale datelor=>alegerea strategiei. Strategia Greedy=strategia in care optimul local se considera optim general. Este o strategie constructiva prin adaugarea treptata de solutii locale care construiesc solutia finala.Problema=problemele locale care dau solutii ce se asambleaza in solutia finala. Obs: cand strategia nu duce la o solutie(in cazul neliniaritatilor) Se da o multime A si se cere (B inclus in A) care are criteriile obligatorii si se cer si criteriile de optimalitate neobligatorii.Solutia este de a alege un elem. din A succesiv care maximalizeaza optimalitatea in momentul alegerii lui=>se construieste B prin respectarea criteriilor obligatorii.Solutiile cu ajutorul alg. Dextra. Problemele au urmatoarea structura: - Se da o multime A={a 1 a 2 , , a n } - Se cere sa determinam o submultime B a multimii A, care indeplineste anumite conditii pentru a fi acceptata in calitate de solutie. Analiza Algoritmurilor Pentru a putea decide care dintre algoritmii ce rezolv aceeai problem este mai bun, este nevoie s definim un criteriu de apreciere a valorii unui algoritm. In general, acest criteriu se refer la timpul de calcul i la memoria necesar unui algoritm. - tehnica Greedy poate fi privit ca un caz particular al tehnicii Backtracking, n care se renun la mecanismul de ntoarcere;
- ambele tehnici ofer soluii sub form de vector;
-tehnica Backtracking poate oferi toate soluiile problemei, n timp ce tehnica Greedy ofer o singur soluie;
-tehnica Greedy nu dispune de mecanimul ntoarcerii, specific tehnicii Backtracking. Greedy - Backtracking - tehnica Greedy conduce mai repede la o solutie.
- problemele de tip Greedy pot fi rezolvate prin metoda trierii , genernd consecutiv cele 2 n submulimi ale mulimii A;
- Dezavantajul metodei trierii const n faptul c timpul cerut pentru executarea algoritmului respectiv este foarte mare. Greedy Metoda trierii
De remarcat:
Cel care elaboreaz un algoritm Greedy, procednd n modul ales de el, ajunge la rezultatul dorit.
Pentru fiecare problem n parte, dup ce se identific un algoritm, este obligatoriu s se demonstreze c aceata conduce la soluia optim.
Demonstraia faptul c se ajunge la soluia optim este specific fiecrei probleme n parte.
Tehnica Greedy conduce la timp de calcul polinomial. Pentru a rezolva o problem cu Greedy, soluia se construiete, dup regula:
Pentru fiecare element care urmez s fie adugat soluiei finale, se efectueaz o alegere a sa din elementele mulimii A (dup un mecanism specific fiecrei probleme n parte), iar dac este posibil, aceasta este adugat. Algoritmul se termin fie cnd a fost gsit soluia cerut, fie cnd s-a constatat inexistena acesteia. Pentru a evita trierea tuturor submultimilor multimii A n metoda Greedy se utilizeaz un criteriu (o regul) care asigur alegerea direct a elementelor necesare.
De obicei regulile de selecie nu sunt indicate n mod explicit n condiia problemei si totul depinde de ingeniozitatea programatorului.
Schema general a unui algoritm bazat pe metoda Greedy:
While ExistaElemente do begin AlegeUnElement(x); IncludeElementul(x) end.
NU ntotdeauna exist un algoritm de tip Greedy care gsete soluia optim.
Exist probleme pentru care nu se cunosc astfel de algoritmi. Mai mult, pentru cele mai multe probleme, nu se cunosc algoritmi Greedy. Nu tuturor problemelor li se pot aplica algoritmi de tip Greedy.
Pentru problemele pentru care nu se cunosc algoritmi care necesit timp polinomial, se caut soliii, chiar dac nu optime, atunci apropiate de acestea, dar care au fost obinute n timp util.
Multe din aceste soliii sunt obinute cu Greedy.
Astfel de agoritmi se numesc algoritmi euristici.
Probleme pentru care Greedy obine soluia optim 1. Suma componentelor prime : Fie a o variabil indexat, ale crei componente A(1) , A(2),, A(n)sunt numere naturale nenule. S se determine suma componentelor care sunt numere prime. Atunci cnd un numr prim se repet, el va fi luat n consideraie o singur dat. Solutie 2. Problema spectacolelor: ntr-o sal ntr-o zi trebuie planificate n spectacole. Pentru fiecare spectacol se cunoate intervalul n care se desfoar: (st, sf). Se cere s se planifice un numr maxim de spectacole astfel nct s nu se suprapun. Solutie 3. Memorarea optimala a fisierelor pe benzi Se cere o aranjare optima a n fisiere cu lungimile L 1 , L 2 , ... ,L n pe o banda magnetica in ipoteza ca timpul de citire al unui fisier este proportional cu lungimea sa, iar pe banda citirea fisierului k implica si citirea celor k-1 fisiere precedente. Presupunem ca frecventa de citire a unui fisier este aceeasi pentru toate fisierele. Aranjarea optima a fisierelor pe o banda magnetica nseamna gasirea acelei dispuneri a fisierelor care sa permita obtinerea unui timp mediu de citire minim. Solutie nume_1 date fis_1 EOF nume_2 Date fis_2 EO F ...... EO F Vom identifica fisierele printr-un numar natural cuprins ntre [1, n], iar lungimea fisierului i prin valoarea Lpi. 1 2 n Lp1 Lp2............................... Lpn Metoda Greedy are dou componente: - stabilirea soluiei de nceput; - optimizarea acesteia. S lum un exemplu concret , pe baza cruia vom ilustra cum se construiete soluia. Fie secvena : 8, 7, 8, 4, 9, 7, 5, 5, 4, 8, 7, 5, 9. Deoarece A (1) este 8, nefiind numr prim se pornete cu soluia iniial S:=0 (dac A (1) ar fi fost numr prim, am fi pornit cu soluia s:=A(1)). Apoi valorile lui S vor fi: S:=0 S:=0+7=7 S:=7+5=12 De remarcat caracterul constructiv al soluiei. Un termen curent (fie acesta A( i )) contribuie la valoarea lui S dac ndeplinete dou condiii : - este un numr prim; - n-a mai fost utilizat. Dac in prealabil ordonm cresctor secvena considerat obinem: 4, 4, 5, 5, 5, 7, 7, 7, 8, 8, 8, 9, 9 i astfel se vede mult mai uor repetabilitatea unui numar prim( fa de situaia iniial cnd pentru a constata dac un numr prim a fost sau nu utilizat trebuie s parcurgem ntreaga secven de fiecare dat ).
Pe baza afirmaiilor anterioare rezult un model de rezolvare pentru problema propus, model care d structura general a metodei Greedy :
Citire ( n , A); Ordonare ( n , A ); If A [1] = NumarPrim Then S := A[1] Else S:=0; I := 2; While I n do begin If (A[ I] <> A(I-1) )and (A [I] =Numarprim ) Then S := S +A [I] I := I+1; End;
Fie o planificare optim a spectacolelor (un numr maxim k de spectacole i 1 , i 2 ,...,i k unde i 1 , i 2 ,...,i k {1,2,N} i spectacolul i j are loc naintea spectacolului i j+1 ). O astfel de planificare ndeplinete condiia: spectacolul i j+1 ncepe dup terminarea spectacolului i j . o consecin imediat a condiiei de mai sus este: spectacolul i j ia sfrit naintea terminrii spectacolului i j+1 (consecina nu implic un efort de gndire deosebit). Vom construi o soluie dup urmtorul algoritm: P1. Sortm spectacolele dup ora terminrii lor; P2 . Primul spectacol programat este cel care se termin cel mai devreme; P3. Alegem primul spectacol dintre cele care urmeaz n ir dup ultimului spectacol programat care ndeplinete condiia c ncepe dup ce s-a terminat ultimul spectacol programat; P4. Dac tentativa de mai sus a euat (nu am gsit un astfel de spectacol) algoritmul se termin, astfel se programeaz spectacolul gsit i algoritmul se reia de la pasul 3. Lem. Algoritmul de mai sus conduce la soluie optim (numr maxim de spectacole programate). Demonstraie: Fie s1, s2,...,sl spectacole ordonate ca mai sus i o soluie optim i1, i2,...,ik. Dac l=k rezult c soliia gsit este optim; Dac l>k rezult c soluia i1, i2,...,ik nu este optim (se contrazice ipoteza); Dac l<k procedm ca mai jos. Presupunem c i1s1. n acest caz putem nlocui i1 (n cadrul soluiei opime) cu s1 (s1 este primul spectasol care se termin i dac ar figura pe alt poziie n cadrul soluiei optime, se contrazice ipoteza). n concluzie, soluia s1, i2,...,ik rmne optim. Fie lt primul indice pentru care stit. Soluia s1, s2,...,st-1 it... este optim. nlocuim it cu st. nlocuirea este posibil pentru c: St nu figureaz n cadrul soluiei optime ntre primele t-1 componente; St nu figureaz ntre ultimile poziii ale soluiei optime (ncepnd cu poziia t+1) pentru c n acest caz nseamn c st ncepe dup terminarea lei it, caz n care se contrazic modul n care a fost obinut de algoritm alegerea lui st. Procednd astfel, la un mment dat soluia optim aete de forma: s1, s2,...,sl...ik. Aceasta nseamn c dup sl a mai fost posibil s adugm alte spectacole. Se contrazicemodul de obinere al soluiei de ctre algoritm. De aici rezult k=i i c algoritmul obine soluia optim.
Program SPECT; Type spectacol=array[1..2, 1..10] of integer; ordine=array[1..10] of integer; var s:spectacol; o:ordine; n,i,h1,m1,h2,m2:integer; procedure sortare; var gata:boolean; m,i:integer; begin repeat gata:=true; for I:=1 to n-1 do if s[2,o[i]]>s[2,[I+1]] then begin m:=o[i]; o[i]:=o[I+1]; o[I+1]:=m; gata:=false end until gata; end; begin write(n); readln(n); for I:=1 to n do Begin o[i]:=i; write(ora de ]nceput pentru spestacolul,I,(hhmm)=); readln(h1,m1); s[1,i]:=h1*60+m1; write(ora de sfrsit pentru spestacolul,I,(hhmm)=); readln(h2,m2); s[2,i]:=h1*60+m2; end; sortare; writeln(ordinea spectacolelor este ); writeln(o[1]); for I:=2 to n do if s[1,o[i]]>=s[2,o[I-1]] then writeln(o[i]); end.
Tehnica Greedy conduce la timp de calcul polinomial.
Motivul care conduce la acest timp de calcul, tine de mecanismul tehnicii. S presupunem c mulimea din care se face alegerea are n elemente si c soluia are tot n elemente (caz maxim). Se fac n alegeri, la fiecare alegere se fac n teste, rezulta un algoritm cu timp O(n 2 ). De multe ori este necesar ca elementele mulimii A s fie sortate, pentru ca apoi s alegem din acestea, iar sortarea necesita un timp minim O(n * log 2 n). Ins sortarea se efectueaz la nceput. Prin urmare, acest timp se adun, deci nu influeneaz rezultatul.