Sunteți pe pagina 1din 4

Fișa de lucru nr.

15 Anul 3 Disciplina Informatica


FIŞĂ DE LUCRU
Tehnica Greedy
Numele, prenumele Dinu Octavian
Data: 01.12.2021 grupa Mk-191
Disciplina: Informatică
Scopul lucrării: Utilizarea tehnicilor de programare la rezolvarea problemelor

PARTEA TEORETICĂ
Tehnica Greedy
Această metodă presupune că problemele pe care trebuie să le rezolvăm au următoarea structură:
● se dă o mulţime A={a1, a2, ..., an} formată din n elemente;
● se cere să determinăm o submulţime B, B⸦A, care îndeplineşte anumite condiţii pentru a fi acceptată ca
soluţie.
În principiu, problemele de acest tip pot fi rezolvate prin metoda trierii, generînd consecutiv cele 2n submulţimi Ai ale
mulţimii A. Dezavantajul metodei trierii constă în faptul că timpul cerut de algoritmii respectivi este foarte mare.
Pentru a evita trierea tuturor submulţimilor Ai, Ai⸦A, în metoda Greedy se utilizează un criteriu (o regulă) care
asigură alegerea directă a elementelor necesare din mulţimea A. De obicei, criteriile sau regulile de selecţie nu sînt indicate
explicit în enunţul problemei şi formularea lor cade în sarcina programatorului. Evident, în absenţa unor astfel de criterii
metoda Greedy nu poate fi aplicată.
Schema generală a unui algoritm bazat pe metoda Greedy poate fi redată cu ajutorul unui ciclu:
while ExistaElemente do
begin
AlegeUnElement(x);
IncludeElementul(x);
end

Funcţia ExistaElemente returnează valoarea true dacă în mulţimea A există elemente care satisfac criteriul
(regula) de selecţie. Procedura AlegeUnElement extrage din mulţimea A un astfel de element x, iar procedura
IncludeElementul înscrie elementul selectat în submulţimea B. Iniţial B este o mulţime vidă.
După cum se vede, în metoda Greedy soluţia problemei se caută prin testarea consecutivă a elementelor din mulţimea
A şi prin includerea unora din ele în submulţimea B. Într-un limbaj plastic, submulţimea B încearcă să „înghită” elementele
„gustoase” din mulţimea A, de unde provine şi denumirea metodei (greedy - lacom, hrăpăreţ).
Complexitatea temporală a algoritmilor bazaţi pe metoda Greedy poate fi evaluată urmând schema generală de
calcul prezentată mai sus. De obicei, timpul cerut de procedurile ExistaElemente, AlegeUnElement şi
IncludeElementul este de ordinul n. În componenţa ciclului while aceste proceduri se execută cel mult de n ori.
Prin urmare, algoritmii bazaţi pe metoda Greedy sunt algoritmi polinomiali. Pentru comparare, amintim că algoritmii bazaţi
pe trierea tuturor submulţimilor Ai, Ai⸦A, sunt algoritmi de ordinul O(2n), deci exponenţiali. Cu regret, metoda Greedy
poate fi aplicată numai atunci când din enunţul problemei poate fi dedusă regula care asigură selecţia directă a elementelor
necesare din mulţimea A.

Sarcini practice:
Nr. Item Scor
1 Stabiliți valoarea de adevăr pentru fiecare din următoarele afirmații (bifați opțiunea corectă): L
0
o Dezavantajul metodei trierii constă în □ Adevărat □ Fals 1
faptul că timpul cerut de algoritmi 2
este foarte mare. 3
4
o În metoda Greedy se utilizează un cri- □ Adevărat □ Fals 5
teriu care asigură alegerea directă a 6
elementelor necesare din mulțimea A. 7

o În metoda Greedy soluția problemei se □ Adevărat □ Fals


Caută prin testarea aleatorie a elemen-
telor din mulțimea A.

o Metoda Greedy poate fi aplicată numai □ Adevărat □ Fals


Colegiul Agroindustrial din Ungheni Profesor: Ciornenchi Aliona
Fișa de lucru nr.15 Anul 3 Disciplina Informatica
atunci când din enunțul problemei poate
fi de dusă regula care asigură selecția
directă a elementelor necesare din
mulțimea A.

o Algoritmii bazați pe metoda Greedy sunt □ Adevărat □ Fals


exponențiali.

o Timpul cerut de procedurile □ Adevărat □ Fals


ExistaElemente, AlegeElemente și
IncludeElementul este de ordinul n.

o Algoritmii bazați pe metoda Greedy sunt □ Adevărat □ Fals


polinomiali.

2 Se consideră mulţimea A={a1, a2, ..., ai, ..., an} elementele căreia sunt numere reale, iar cel L
puţin unul din ele satisface condiţia ai>0. Elaboraţi un program care determină o submulţime B, B⸦A, astfel 0
încât suma elementelor din B să fie maximă. 1
2
Programul Pascal: 3
4
Program P1; 5
const nmax=1000; 6
var A : array [1..nmax] of real; 7
n : 1..nmax; 8
B : array [1..nmax] of real; 9
m : 0..nmax; 10
x : real; 11
i : 1..nmax;
Function ExistaElemente : boolean;
var i : integer;
begin
ExistaElemente:=false;
for i:=1 to n do
if A[i]>0 then ExistaElemente:=true;
end;
procedure AlegeUnElement(var x : real);
var i : integer;
begin
i:=1;
while A[i]<=0 do i:=i+1;
x:=A[i];
A[i]:=0;
end;
procedure IncludeElementul(x : real);
begin
m:=m+1;
B[m]:=x;
end;
begin
write('Daţi n='); readln(n);
writeln('Daţi elementele mulţimii A:');
for i:=1 to n do read(A[i]);
writeln;
m:=0;
while ExistaElemente do
begin
AlegeUnElement(x);
IncludeElementul(x);
end;
writeln('Elementele mulţimii B:');
for i:=1 to m do writeln(B[i]);
readln;

Colegiul Agroindustrial din Ungheni Profesor: Ciornenchi Aliona


Fișa de lucru nr.15 Anul 3 Disciplina Informatica
end.

Rezultatul:
Daţi n=6
Daţi elementele mulţimii A:
5.39
-8.29
25.54
9.99
-78.92
-12.04

Elementele mulţimii B:
5.3899999999999997E+000
2.5539999999999999E+001
9.9900000000000002E+000

Colegiul Agroindustrial din Ungheni Profesor: Ciornenchi Aliona


Fișa de lucru nr.15 Anul 3 Disciplina Informatica

Colegiul Agroindustrial din Ungheni Profesor: Ciornenchi Aliona

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