Sunteți pe pagina 1din 43

Metoda programarii dinamice

Conf. dr. Smaranda Belciug


sbelciug@inf.ucv.ro
Programare dinamica
—  O meta-tehnica (seamana cu divide-et-impera)

—  Se foloseste atunci cand problema initiala se poate sparge in

probleme asemanatoare, mai mici.

—  Se foloseste cand solutia se poate calcula recursiv folosind

solutiile subproblemelor.

—  Algoritmul gaseste solutii la subprobleme si le stocheaza in

memorie pentru a le folosi mai tarziu.

2
Conceptul de programare dinamica
—  Ideea de baza:

—  Solutia optima a problemei consta in gasirea solutiilor optime

ale subproblemelor
—  Se rezolva de jos in sus, prin construirea unui tabel al

subproblemelor rezolvate, folosit pentru rezolvarea problemei


initiale.

3
Problema rucsacului (recapitulare)
—  Data fiind o multime de obiecte, sa se aleaga acelea care

maximizeaza valoarea totala si incap intr-un rucsac. Fiecare obiect


are o greutate si o valoare. Nu putem cara mai mult de o anumita
greutate W.

—  Obiect # Greutate Valoare


1 1 8

2 3 6
3 5 5

4
Problema rucsacului
—  Exista doua versiuni ale acesteu probleme:

—  0-1

—  Fractionala

—  0-1: obiectele nu se pot fractiona; se rezolva cu metoda

programarii dinamice
—  Fractionala: obiectele se pot fractiona; se rezolva cu

algoritmul greedy.

5
Problema rucsacului 0-1
—  Fie un rucsac cu o capacitate W si o multime S ce consta in n

obiecte.

—  Fiecare obiect i are o greutate wi si o valoare bi (wi, bi si W

sunt intregi)

—  Problema: ce obiecte trebuie alese, astfel incat sa maximizam

costul?

6
7
—  Cu alte cuvinte, problema pe care trebuie sa o rezolvam este

aceea de a gasi astfel incat .

—  Problema se numeste 0-1, deoarece un obiect fie luat intreg,

fie deloc.

—  In cazul cazului fractional, se pot luat fractiuni din obiect.

8
Abordare brute-force
—  Sa rezolvam mai intai problema folosind un algoritm direct

—  Deoarece sunt n obiecte, inseamna ca sunt

posibilitati.
—  Parcurgem toate combinatiile posibile si gasim valoarea maxima

pe care o putem obtine


—  O( )

9
—  Exista o metoda mai buna?

—  Da, folosind un algoritm bazat pe programarea dinamica

—  Putem identifica foarte simplu subproblemele

—  Daca problema initiala are obiectele 1...n, atunci o

subproblema ar fi gasirea unei solutii optime pentru Sk =


{obiecte etichetate 1...k}

10
Definirea unei subprobleme
—  Daca problema initiala are obiectele 1...n, atunci o

subproblema ar fi gasirea unei solutii optime pentru Sk =


{obiecte etichetate 1...k}

—  Este o definitie rezonabila pentru o subproblema

—  Intrebarea este: putem descrie solutia finala Sn folosind

subprobleme Sk?

—  Din pacate, nu.

11
Definirea unei subprobleme
—  Deci, definitia unei subprobleme este gresita.

—  Sa adaugam un nou parametru: w, care va reprezenta

greutatea exacta pentru fiecare submultime de obiecte

—  Problema va trebui sa calculeze B[k,w]

12
Formula recursiva pentru subprobleme

—  Formula recursiva pentru subprobleme

—  Inseamna ca cea mai buna submultime Sk care are greutatea totala

w este
—  Cea mai buna submultime Sk-1 care are greutatea w

—  Cea mai buna submultime Sk-1 care are greutatea w-wk plus obiectul k

13
—  Cea mai buna submultime Sk care are greutatea totala w, fie

contine obiectul k, fie nu

—  Primul caz: wk > w, obiectul k nu poate fi in parte a solutiei

deoarece am depasi greutatea w

—  Al doilea caz: wk <= k, obiectul k poate fi parte a solutiei, si

vom alege solutia care are o valoarea mai mare

14
Algoritm Rucsac 0-1

15
Timp de rulare

16
Exemplu
—  Sa rulam algoritmul pe urmatoarele date:

—  n = 4 # obiecte

—  W = 5 (greutate maxima)

—  Obiecte (greutate, castig)

—  (2,3), (3,4), (4,5), (5,6)

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Cum gasim efectiv obiectele corecte?
—  Toate informatiile de care avem nevoie se gasesc in tabel.

—  B[n,W] sunt valorile maxime ce pot fi introduse in rucsac

—  Fie i = n si k=W
—  If B[i,k]!=B[i-1,k]
—  Marcam obiectul i ca fiind in rucsac

—  i = i-1, k = k-wi

—  Else
—  i= i-1

35
36
37
38
39
40
41
42
Pe saptamana viitoare!

43

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