Sunteți pe pagina 1din 26

| 

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.
 
   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.
Änformatica (clasa 11-
11-a)

v | ° | 

v O °

        
 


 
       
    
 
 
 
Elevul:
Elevul:
O1. sa defineasca si sa clasifice pe baza explicatiilor date
de profesor un algoritm Greedy
O2. Sa identifice avantajele si dezavantajele utilizarii
acestei tehnici de programare.
programare.
O3. Sa scrie programe Pascal pentru algoritmi Greedy

h
v èonversatia euristica
v Observatia participativa
v Expunerea
v Änvatarea prin descoperire dirijata
v Metoda orientata pe exemple si pe
rezolvarea de exercitii in laborator
v Modelarea matematica
v Änstruirea asistata de calculator
Problemele au urmatoarea structura:

- Se da o multime A={a1 a2, «, an}

- Se cere sa determinam o submultime B a multimii A,


care indeplineste anumite conditii pentru a fi acceptata
in calitate de solutie.
ð  
ð
v Pentru a putea decide care dintre algoritmii ce
rezolvăă aceea
rezolv aceeaşşi problemă
problemă este mai bun, este
nevoie săsă definim un criteriu de apreciere a
valorii unui algoritm. Än general, acest criteriu se
referăă la timpul de calcul şi la memoria necesară
refer necesară
unui algoritm.
Greedy ² Metoda trierii

- tehnica Greedy conduce mai repede la o solutie.

- problemele de tip Greedy pot fi rezolvate prin metoda


trierii , generînd consecutiv cele 2n submulîimi ale
mulţimii A;

- Dezavantajul metodei trierii constă în faptul că timpul


cerut pentru executarea algoritmului respectiv este
foarte mare.
h   
Õ       
        
     

Õ  !         !      
         " 

Õ h  "!   "    ! !    
 

Õ | 
    
Ú Pentru a rezolva o problemă cu  y, soluţia se
construieşte, după  :

    
   
      
         
 
 
 
 
 
   
        
         !
  
  
         
        !
     
 
 
 
  

              


   
   !

he obicei regulile de selecţie nu sunt indicate în mod explicit în condiţia problemei si totul
depinde de ingeniozitatea programatorului.
Schema generală a unui algoritm bazat pe metoda
Greedy:

Ô ile ExistaElemente do
begin
AlegeUnElement(x);
ÄncludeElementul(x)
end;
ã întotdeauna există un algoritm de tip Greedy
care găseşte soluţia optimă.

Există probleme pentru care nu se cunosc astfel de


algoritmi. Mai mult, pentru cele mai multe
probleme, nu se cunosc algoritmi Greedy.
ãu tuturor problemelor li se pot aplica algoritmi de
tip Greedy.

Pentru problemele pentru care nu se cunosc


algoritmi care necesită timp polinomial, se caută
soliţii, chiar dacă nu optime, atunci apropiate de
acestea, dar care au fost obţinute în timp util.

Multe din aceste soliţii sunt obţinute cu Greedy.

Astfel de agoritmi se numesc algoritmi euristici.


Probleme pentru care Greedy obţine soluţia
optimă
4Ouma componentelor prime : # a $ %     
ð 4ð &ð sunt numere naturale nenule. Oă se determine suma componentelor care
sunt numere prime. Atunci când un număr prim se repetă, el va fi luat în consideraţie o singură
dată.
Solutie
Problema spectacolelor:
untr-o sală într-o zi trebuie planificate n spectacole. Pentru fiecare spectacol se cunoaşte intervalul în
care se desfăşoară: (st, sf). Oe cere să se planifice un număr maxim de spectacole astfel încît să nu se
suprapună.
Solutie
ÑMemorarea optimala a fisierelor pe benzi
    !    '4''   
       !    
      ! (   (4!  
      ! $     !      
 !   ð  !       
     !           
 

"#
  "# $%& 
"' (  "' $% !!!!!! $%
& &

·om identifica fisierele printr-un numar natural cuprins ǻntre å4), iar
lungimea fisierului  prin valoarea '.
Solutie
1 2 n
Lp1 Lp2............................... Lpn
Metoda Greedy are două componente:
- stabilirea soluţiei de început;
- optimizarea acesteia.
Să luăm un exemplu concret , pe baza căruia vom ilustra cum se ¶·construieşte·· soluţia.
Fie secvenţa :
8, 7, 8, 4, 9, 7, 5, 5, 4, 8, 7, 5, 9.
Deoarece A (1) este 8, nefiind număr prim se porneşte cu soluţia iniţială S:=0 (dacă A (1)
ar fi fost număr prim, am fi pornit cu soluţia s:=A(1)).
Apoi valorile lui S vor fi:
S:=0
S:=0+7=7
S:=7+5=12
De remarcat caracterul constructiv al soluţiei. Un termen curent (fie acesta A( i )) contribuie
la valoarea lui S dacă îndeplineşte două condiţii :
- este un număr prim;
- n-a mai fost utilizat.
Dacă in prealabil ordonăm crescător secvenţa considerată obţinem:
4, 4, 5, 5, 5, 7, 7, 7, 8, 8, 8, 9, 9
şi astfel se ´vede·· mult mai uşor repetabilitatea unui numar prim( faţă de situaţia iniţială
când pentru a constata dacă un număr prim a fost sau nu utilizat trebuie să parcurgem
întreaga secvenţă de fiecare dată ).
Pe baza afirmaţiilor anterioare rezultă un model de rezolvare pentru problema
propusă, model care dă structura generală a metodei Greedy :

èitire ( n , A);
Ordonare ( n , A );
Äf A [1] = ãumarPrim Then S := A[1]
Else S:=0;
Ä := 2;
While Ä Y n do
begin
Äf (A[ Ä] <> A(Ä-1) )and (A [Ä] =ãumarprim ) Then S := S +A [Ä]
Ä := Ä+1;
End;
Fie o planificare optimă a spectacolelor (un număr maxim k de
spectacole i1, i2,...,ik unde i1, i2,...,ik{1,2,«ã} şi spectacolul ij are
loc înaintea spectacolului i j+1). O astfel de planificare îndeplineşte
condiţia: spectacolul ij+1 începe după terminarea spectacolului ij.
o consecinţă imediată a condiţiei de mai sus este: spectacolul ij ia
sfîrşit înaintea terminării spectacolului ij+1(consecinţa nu implică
un efort de gîndire deosebit).
·om construi o soluţie după următorul algoritm:
4 Sortăm spectacolele după ora terminării lor;
 . Primul spectacol programat este cel care se termină cel
mai devreme;
Ñ Alegem primul spectacol dintre cele care urmează în şir
după ultimului spectacol programat care îndeplineşte condiţia
că începe după ce s-a terminat ultimul spectacol programat;
* Dacă tentativa de mai sus a eşuat (nu am găsit un astfel de
spectacol) algoritmul se termină, astfel se programează
spectacolul găsit şi algoritmul se reia de la pasul 3.
' Algoritmul de mai sus conduce la soluţie optimă (număr maxim de spectacole
programate).
Demonstraţie:
Fie s1, s2,...,sl spectacole ordonate ca mai sus şi o soluţie optimă i1, i2,...,ik.
Dacă l=k rezultă că soliţia găsită este optimă;
Dacă l>k rezultă că soluţia i1, i2,...,ik nu este optimă (se contrazice ipoteza);
Dacă l<k procedăm ca mai jos.
Presupunem că i1-s1. În acest caz putem înlocui i1 (în cadrul soluţiei opime) cu s1 (s1
este primul spectasol care se termină şi dacă ar figura pe altă poziţie în cadrul soluţiei
optime, se contrazice ipoteza). În concluzie, soluţia s1, i2,...,ik rămîne optimă.
Fie l t primul indice pentru care st-it. Soluţia s1, s2,...,st-1 it... este optimă. Înlocuim it
cu st. Înlocuirea este posibilă pentru că:
St nu figurează în cadrul soluţiei optime între primele t-1 componente;
St nu figurează între ultimile poziţii ale soluţiei optime (începînd cu poziţia 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 obţinut de algoritm alegerea lui st.
Procedînd astfel, la un mment dat soluţia optimă aete de forma: s1, s2,...,sl...ik.
Aceasta înseamnă că după sl a mai fost posibil să adăugăm alte spectacole. Se
contrazicemodul de obţinere al soluţiei de către algoritm. De aici rezultă k=i şi că
algoritmul obţine soluţia optimă.
Program SPEèT;
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 Ä:=1 to n-1 do if s[2,o[i]]>s[2,[Ä+1]] then
begin
m:=o[i]; o[i]:=o[Ä+1]; o[Ä+1]:=m; gata:=false
end
until gata; end;
begin
write(¶n·); readln(n);
for Ä:=1 to n do
Begin o[i]:=i; write(¶ora de ]nceput pentru spestacolul·,Ä,·(hhmm)=·);
readln(h1,m1); s[1,i]:=h1*60+m1; write(¶ora de sfrsit pentru
spestacolul·,Ä,·(hhmm)=·); readln(h2,m2); s[2,i]:=h1*60+m2;
end;
sortare; writeln(¶ordinea spectacolelor este ·); writeln(o[1]);
for Ä:=2 to n do
if s[1,o[i]]>=s[2,o[Ä-1]]
then writeln(o[i]); end.
|e nica Greedy conduce la timp de calcul polinomial.

Motivul care conduce la acest timp de calcul, tine de


mecanismul tehnicii.
Să presupunem că mulţimea din care se face alegerea
are n elemente si că soluţia are tot n elemente (caz maxim). Se
fac n alegeri, la fiecare alegere se fac n teste, rezulta un
algoritm cu timp O(n2).
De multe ori este necesar ca elementele mulţimii A să
fie sortate, pentru ca apoi să alegem din acestea, iar sortarea
necesita un timp minim O(n * log2n). Änsă sortarea se
efectuează la început. Prin urmare, acest timp se adună, deci
nu influenţează rezultatul.