Sunteți pe pagina 1din 35

Metode de

programare

X G X R E X E X D Y

G R E E D Y
Sumar
1. Competene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Descrierea general a metodei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3. Generarea elementelor combinatoriale. . . . . . . . . . . . . . . . . . . . . . . . 7
4. Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5. Aplicaii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6. Bibliografie i webografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2
1. Competene
Competene generale
elaborarea algoritmilor de rezolvare a problemelor
implementarea algoritmilor ntr-un limbaj de programare

Competene specifice
analiza problemei n scopul identificrii metodei de programare
adecvate pentru rezolvarea problemei
aplicarea creativ a metodelor de programare pentru rezolvarea unor
probleme intradisciplinare sau interdisciplinare, sau a unor probleme
cu aplicabilitate practic
analiza comparativ a eficienei diferitelor metode de rezolvare a
aceleiai probleme i alegerea unui algoritm eficient de rezolvare a
unei probleme
elaborarea unui algoritm de rezolvare a unor probleme din aria
curricular a specializrii
utilizarea tehnicilor moderne n implementarea aplicaiilor

3
2. Descrierea general a metodei
Metoda Greedy1 (metoda optimului local) este o metod de programare
care se folosete n probleme de optimizare i care furnizeaz o singur
soluie (optimul global), obinut prin alegeri succesive ale optimului local.

Metoda se aplic problemelor pentru care se d o mulime A cu n elemente


i pentru care trebuie determinat o submulime a sa, S cu m elemente,
care ndeplinesc anumite condiii.

1 lacom

4
Descrierea general a metodei
Problemele care se pot rezolva cu aceast metod sunt de forma:
- se d o mulime A
- se cere o submulime SA care:
s ndeplineasc anumite condiii interne (s fie acceptabil) i
s fie optimal (s realizeze un maxim sau un minim).

5
Descrierea general a metodei
Principiul metodei Greedy:
se iniializeaz mulimea soluiilor S cu mulimea vid, S=
la fiecare pas se alege un anumit element xA (cel mai promitor
element la momentul respectiv) care poate conduce la o soluie optim
se verific dac elementul ales poate fi adugat la mulimea soluiilor:
- dac da, atunci va fi adugat i mulimea soluiilor devine S=S{x}
- un element introdus n mulimea S nu va mai putea fi eliminat
- dac nu, el nu se mai testeaz ulterior
procedeul continu, pn cnd au fost determinate toate elementele din
mulimea soluiilor

6
3. Exemple
1. Sum maxim
Se d o mulime A={a1, a2, . . ., an} cu elemente reale. S se
determine o submulime a lui S astfel nct suma elementelor submulimii
s fie maxim.

7
Exemple
Exemplu:

suma.in suma.out
6 12 78 5 18
12 -4 78 -21 5 18
5 Nu exista solutie!
-12 -7 -895 -54 -231

8
Exemple
2. Cele mai mari dou elemente ale unui ir
Se d o mulime A={a1, a2, . . ., an} cu elemente ntregi. S se
determine cele mai mari dou elemente ale mulimii.

9
Exemple
Exemplu:

maxime.in maxime.out
7 54 488
5 44 -6 12 47 488 54

10
Exemple
3. Festivitate de premiere
La o festivitate de premiere, dirigintele clasei are n obiecte (n1000), de
valori cunoscute, mai mici dect 100 lei. tiind c elevului care a obinut
premiul I, i va fi nmnat m obiecte, realizai un program care identific
valoarea maxim a premiului I i care obiecte au fost selectate.

11
Exemple
Exemplu:

premiu.in premiu.out
8 4 9 8 8 7
3 7 8 1 6 8 9 5 32

12
Exemple
4. Timp de ateptare
La o cas de marcat sunt servii n clieni (n1000). Cunoscndu-se timpul
necesar de servire pentru fiecare client, s se determine o ordine de
servire a clienilor, astfel nct timpul mediu de ateptare s fie minim.

13
Exemple
Exemplu:

clienti.in clienti.out
5 1 1 2 3 4
3 1 1 4 2 14/5

14
Exemple
5. Problema spectacolelor
ntr-o sal de spectacole, ntr-o zi, trebuie planificate n spectacole. Pentru
fiecare spectacol se cunoate intervalul n care se desfoar. Se cere s
se planifice un numr maxim de spectacole astfel nct s nu se
suprapun.

Soluie:
- mulimea A este format din cele n spectacole;
- fiecare spectacol are un interval de timp [a,b],(a<b) i un numr de
ordine nr;
- dou spectacole i i j sunt compatibile dac intervalele lor de ocupare
([ai,bi],[aj,bj]) sunt disjuncte (bi<aj sau bj<ai);
- se sorteaz spectacolele cresctor dup ora de ncheiere a
spectacolului;
- se afieaz spectacolele pentru care ora de nceput a spectacolului i
este mai mare sau egal cu ora de sfrit a ultimului spectacol
programat;

15
Exemple

16
Exemple
Exemplu:

spectacol.in spectacol.out
5 5 2 4
12 30 16 30
15 0 18 0
10 0 18 30
18 0 20 45
12 15 13 0

17
Exemple
6. Expresie de valoare maxim
Pentru dou mulimi de numere ntregi nenule, C cu n elemente i A cu m
elemente, (nm), se cere s se formeze o submulime de n elemente din
mulimea A, astfel nct expresia:
E=c1x1+c2x2++cnxn s aib valoarea maxim, (xiA).

Soluie:
- se sorteaz cresctor cel dou mulimi;
- se parcurg mulimile de la ultimul la primul element, ct timp elementele
sunt pozitive i nu au fost gsii n termeni ai expresiei E;
- se rein n p i q poziiile la care s-a ntrerupt parcurgerea n cele dou
mulimi;
- se parcurg mulimile de la primul la ultimul element ct timp elementele
sunt negative i nu au fost gsii n termeni ai expresiei E;
- dac elementul din mulimea C este negativ se continu cu parcurgerea
mulimilor pn au fost gsii n termeni ai expresiei E;
- dac elementul din mulimea C este pozitiv se continu cu parcurgerea
mulimilor de la p, respectiv q, pn au fost gsii n termeni ai expresiei
E;
18
Exemple

19
Exemple
Exemplu:

expresie.in expresie.out
6 7 19
-2 -1 3 4 5 5
-6 -5 -4 -3 -1 1 2
5 7 97
-2 -1 3 4 5
-5 -4 -1 2 5 7 8
6 7 77
-5 -4 -3 -1 4 5
-5 -4 1 2 3 4 5

20
Exemple
7. Plata unei sume de bani
S se plteasc o sum s cu un numr minim de bancnote cu valori date.
Se consider c din fiecare tip de bancnot se poate folosi un numr
nelimitat de bancnote, iar pentru ca problema s aib soluie, vom
considera c exist i bancnote cu valoarea 1.

Soluie:
- se sorteaz descresctor vectorul de bancnote;
- atta timp ct suma s este diferit de zero se determin ce bancnote se
folosesc i cte astfel de bancnote;

21
Exemple

22
Exemple
Exemplu:

suma.in suma.out
4 50x2
147 10x4
5 1 50 10 5x1
1x2

23
Exemple
8. Numere frumoase
Fiind dat un numr natural n, afiai pe ecran primele n numere frumoase.
Numerele frumoase sunt numerele care au ca factori primi doar pe 2, 3 i 5.

Soluie:
- n2 reprezint cel mai mic multiplu de 2 din ir, neadugat;
- i reprezint indicele elementului din vector care l conine pe elementul
din care s-a obinut prin nmulirea cu 2;
- n3 reprezint cel mai mic multiplu de 3 din ir, neadugat;
- j reprezint indicele elementului din vector care l conine pe elementul
din care s-a obinut prin nmulirea cu 3;
- n5 reprezint cel mai mic multiplu de 5 din ir, neadugat;
-k reprezint indicele elementului din vector care l conine pe elementul
din care s-a obinut prin nmulirea cu 5;
- se completeaz primul element din vectorul cu valoarea 1;
- atta timp ct vectorul soluie nu are n elemente, se adaug n vector
elementul minim dintre elementele n2, n3 i n5, apoi se mrete variabila
respectiv prin nmulirea cu poziia urmtoare celei de unde a fost
obinut;
24
Exemple

25
Exemple
Exemplu:

numere.in numere.out
40 1 2 3 4 5 6 8 9 10 12 15
16 18 20 24 25 27 30 32
36 40 45 48 50 54 60 64
72 75 80 81 90 96 100 108
120 125 128 135 144

26
Exemple
9. Problema rucsacului
Se consider un rucsac cu care se poate transporta o greutate maxim
Gmax i mai multe obiecte de greuti g1, g2,, gn, la transportul crora se
obin ctigurile c1, c2,, cn. Se cere s se ncarce rucsacul astfel nct s
se obin un ctig maxim.

Problema poate fi transformat n dou probleme distincte:


- problema discret a rucsacului (obiectele nu pot fi tiate);
- problema continu a rucsacului (obiectele pot fi tiate).

Observaie: problema discret a rucsacului se poate rezolva optim cu


ajutorul programrii dinamice.

27
Exemple
a. Problema rucsacului varianta discret

Soluie:
- se determin eficiena fiecrui obiect i, astfel: ei=ci/gi;
- se sorteaz obiectele descresctor dup eficien;
- iniial, greutatea obiectelor transportate este G;
- se alege un obiect n ordinea descresctoare a eficienei;
- verificm dac putem aduga obiectul, adic dac prin adugare nu se
depete greutatea admis;
- repetm procedeul pn cnd s-au terminat obiectele sau pn s-a
ncrcat greutatea admis;

28
Exemple

29
Exemple
Exemplu:

rucsac.in rucsac.out
4 10 19
3 2 8 1 1 1 0 1
6 8 8 5

30
Exemple
b. Problema rucsacului varianta continu

Soluie:
- se determin eficiena fiecrui obiect i, astfel: ei=ci/gi;
- se sorteaz obiectele descresctor dup eficien;
- iniial, greutatea obiectelor transportate este G;
- se alege un obiect n ordinea descresctoare a eficienei;
- verificm dac putem aduga obiectul n ntregime, adic dac prin
adugare nu se depete greutatea admis; n caz contrar, se taie
obiectul pstrnd greutatea admis la transport;
- repetm procedeul pn cnd s-au terminat obiectele sau pn s-a
ncrcat greutatea admis;

31
Exemple

32
Exemple
Exemplu:

rucsac.in rucsac.out
3 8 1 1
4 6 2 2 0.666667
4 3 1 6

33
5. Aplicaii
Fi de lucru
Aplicaii metoda de programare Greedy

34
6. Bibliografie i webografie
1. Miloescu M., Informatic. Manual pentru clasa a XI, Editura Didactic
i Pedagogic, Bucureti, 2006
2. Lica D., Informatic. Fundamentele programrii. Culegere de probleme
pentru clasa a XI, Editura L&S Soft, Bucureti, 2006
3. Sorin T., Informatica. Tehnici de programare, Editura L&S Infomat,
Bucureti, 2002
4. Logoftu G., C++. Probleme rezolvate i algoritmi, Editura Polirom,
Iai, 2001
5. http://en.wikipedia.org/wiki/Greedy_algorithm

35

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