Sunteți pe pagina 1din 18

Tehnica Greedy

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.

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