Sunteți pe pagina 1din 35

Metode de

programare

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

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.

lacom

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).

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

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.

Exemple
Exemplu:

suma.in

suma.out

6
12 -4 78 -21 5 18

12 78 5 18

5
-12 -7 -895 -54 -231

Nu exista solutie!

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.

Exemple
Exemplu:

maxime.in

maxime.out

7
5 44 -6 12 47 488 54

54 488

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
3 7 8 1 6 8 9 5

9 8 8 7
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
3 1 1 4 2

1 1 2 3 4
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
12
15
10
18
12

5 2 4
30 16 30
0 18 0
0 18 30
0 20 45
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
-2 -1 3 4 5 5
-6 -5 -4 -3 -1 1 2

19

5 7
-2 -1 3 4 5
-5 -4 -1 2 5 7 8

97

6 7
-5 -4 -3 -1 4 5
-5 -4 1 2 3 4 5

77

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
147
5 1 50 10

50x2
10x4
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
16 18 20 24
36 40 45 48
72 75 80 81
120 125 128

8 9 10 12 15
25 27 30 32
50 54 60 64
90 96 100 108
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
3 2 8 1
6 8 8 5

19
1 1 0 1

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
4 6 2
4 3 1

1 1
2 0.666667
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