Documente Academic
Documente Profesional
Documente Cultură
Dorel Lucanu
Faculty of Computer Science
Alexandru Ioan Cuza University, Iasi, Romania
dlucanu@info.uaic.ro
PA 2014/2015
Programare dinamic
a
PA 2014/2015
1 / 52
Outline
Studii de caz
Problema rucsacului II (varianta discreta)
Distanta ntre siruri
Programare dinamic
a
PA 2014/2015
2 / 52
Prezentarea general
a a paradigmei
Plan
Studii de caz
Problema rucsacului II (varianta discreta)
Distanta ntre siruri
Programare dinamic
a
PA 2014/2015
3 / 52
Prezentarea general
a a paradigmei
Clasa de probleme
Programare dinamic
a
PA 2014/2015
4 / 52
Prezentarea general
a a paradigmei
Modelul matematic
Programare dinamic
a
PA 2014/2015
5 / 52
Prezentarea general
a a paradigmei
Modelul matematic
4
unde:
s si s 0 sunt doua stari astfel ncat una se obtine din cealalta aplicand
decizia d,
z este valoarea asociata starii s,
T (z, y ) calculeaza valoarea starii s 0 , iar
H exprima algoritmul de calcul al valorii f (z) dat de decizia d.
D. Lucanu (FII - UAIC)
Programare dinamic
a
PA 2014/2015
6 / 52
Prezentarea general
a a paradigmei
Modelul matematic
Programare dinamic
a
PA 2014/2015
7 / 52
Prezentarea general
a a paradigmei
Modelul matematic
10
Programare dinamic
a
PA 2014/2015
8 / 52
Studii de caz
Plan
Studii de caz
Problema rucsacului II (varianta discreta)
Distanta ntre siruri
Programare dinamic
a
PA 2014/2015
9 / 52
Studii de caz
Plan
Studii de caz
Problema rucsacului II (varianta discreta)
Distanta ntre siruri
Programare dinamic
a
PA 2014/2015
10 / 52
Studii de caz
Problema
Programare dinamic
a
PA 2014/2015
11 / 52
Studii de caz
Formularea matematica
functia obiectiv:
max
n
X
xi pi
i=1
restrictii:
n
P
xi wi M
i=1
xi {0, 1}, i = 1, . . . , n
wi Z+ , pi Z, i = 1, . . . , n
MZ
Programare dinamic
a
PA 2014/2015
12 / 52
Studii de caz
j
X
xi pi
i=1
restrictii:
j
P
xi wi X
i=1
xi {0, 1}, i = 1, . . . , j
wi Z+ , pi Z, i = 1, . . . , j
X Z
Cu fj (X ) notam valoarea optima pentru instanta Rucsac(j, X ). Daca
j = 0 si X 0, atunci fj (X ) = 0.
D. Lucanu (FII - UAIC)
Programare dinamic
a
PA 2014/2015
13 / 52
Studii de caz
Programare dinamic
a
PA 2014/2015
14 / 52
Studii de caz
Programare dinamic
a
PA 2014/2015
15 / 52
Studii de caz
Obtinerea recurentei
, dac
aX <0
fj (X ) = 0
, dac
a j = 0 si X 0 (2)
Programare dinamic
a
PA 2014/2015
16 / 52
Studii de caz
y {0,1}
Programare dinamic
a
PA 2014/2015
17 / 52
Studii de caz
1
3
10
2
5
30
3
6
20
0
0
0
0
0
1
0
0
0
0
2
0
0
0
0
3
0
10
10
10
4
0
10
10
10
5
0
10
30
30
6
0
10
30
30
7
0
10
30
30
8
0
10
40
40
9
0
10
40
40
10
0
10
40
40
Tabloul de mai sus este calculat linie cu linie: pentru a calcula valorile de
pe o linie sunt consultate numai valorile de pe linia precedenta.
D. Lucanu (FII - UAIC)
Programare dinamic
a
PA 2014/2015
18 / 52
Studii de caz
Analiza
Tabloul de mai sus are dimensiunea n m (au fost ignorate prima linie si
prima coloana). Daca m = O(2n ) rezulta ca atat complexitatea spatiu cat
si cea timp sunt exponentiale. Privind tabloul de mai sus observam ca
exista multe valori care se repeta.
Programare dinamic
a
PA 2014/2015
19 / 52
Studii de caz
Rafinare
Programare dinamic
a
PA 2014/2015
20 / 52
Studii de caz
Rafinare
Graficele functiilor f0 si g0 :
6
10
-
Programare dinamic
a
PA 2014/2015
21 / 52
Studii de caz
Rafinare
Functia f1 se calculeaza prin:
, X < 0
f1 (X ) = max{f0 (X ), g0 (X )} = 0
,0 X < 3
10
,3 X
Notam cu g1 functia data prin:
, X < 5
g1 (X ) = f1 (X w2 ) + p2 = 30
,5 X < 8
40
,8 X
Programare dinamic
a
PA 2014/2015
22 / 52
Studii de caz
Rafinare
Graficele functiilor f1 si g1 :
6
40
30
10
10
-
Programare dinamic
a
PA 2014/2015
23 / 52
Studii de caz
Rafinare
Functia f2 se calculeaza prin:
0
f2 (X ) = max{f1 (X ), g1 (X )} = 10
30
40
In continuare, notam cu g2 functia data prin:
20
g2 (X ) = f2 (X w3 ) + p3 = 30
50
60
D. Lucanu (FII - UAIC)
Programare dinamic
a
,X < 0
,0 X < 3
,3 X < 5
,5 X < 8
,8 X
,X < 6
,6 X < 9
, 9 X < 11
, 11 X < 14
, 14 X
PA 2014/2015
24 / 52
Studii de caz
Rafinare
Graficele functiilor f2 si g2 :
6
60
50
40
30
20
10
40
30
10
-
Programare dinamic
a
56
89
11
PA 2014/2015
14
25 / 52
Studii de caz
Rafinare
10
f3 (X ) = max{f2 (X ), g2 (X )} = 30
40
50
60
Programare dinamic
a
,X < 0
,0 X < 3
,3 X < 5
,5 X < 8
, 8 < X 11
, 11 X < 14
, 14 X
PA 2014/2015
26 / 52
Studii de caz
Rafinare
Graficul functiei f3 :
6
60
50
40
30
10
-
11
14
Programare dinamic
a
PA 2014/2015
27 / 52
Studii de caz
Rafinare
Se remarca faptul ca functiile fi si gi sunt functii n scara. Graficele acestor
functii pot fi reprezentate prin multimi finite din puncte din plan. De
exemplu, graficul functiei f2 este reprezentat prin multimea
{(0, 0), (3, 10), (5, 30), (8, 40)}.
X
f0
f1
f2
f3
0
0
0
0
0
1
0
0
0
0
2
0
0
0
0
3
0
10
10
10
4
0
10
10
10
5
0
10
30
30
6
0
10
30
30
7
0
10
30
30
8
0
10
40
40
9
0
10
40
40
10
0
10
40
40
Programare dinamic
a
PA 2014/2015
28 / 52
Studii de caz
Rafinare
In general, fiecare fi este complet specificat de o multime
Si = {(Xj , Yj ) | j = 0, . . . , r } unde Yj = fi (Xj ).
Presupunem X1 < < Xr .
Analog, functiile gi sunt reprezentate prin multimile
Ti = {(X + wi , Y + pi ) | (X , Y ) Si }.
Notam Ti = (Si ) si Si+1 = (Si , Ti ). Multimea Si+1 se obtine din Si si
Ti prin interclasare.
Algoritmul pentru :
Se considera o variabila L care ia valoarea 1 daca graficul lui fi+1 coincide
cu cel al lui fi si cu 2 daca el coincide cu cel al lui gi . Deoarece (0, 0)
apartine graficului rezultat, consideram L = 1, j = 1 si k = 1.
Programare dinamic
a
PA 2014/2015
29 / 52
Studii de caz
Rafinare
Presupunand ca la un pas al interclasarii se compara (Xj , Yj ) Si cu
(Xk , Yk ) Ti atunci:
daca L = 1:
daca Xj < Xk atunci adauga (Xj , Yj ) n Si+1 si se incrementeaza j;
daca Xj = Xk :
dac
a Yj > Yk atunci adaug
a (Xj , Yj ) n Si+1 si se incrementeaz
a j si k;
dac
a Yj < Yk atunci adaug
a (Xk , Yk ) n Si+1 , L = 2 si se
incrementeaz
a j si k;
daca L = 2:
daca Xj < Xk atunci, daca Yj > Yk adauga (Xj , Yj ) n Si+1 , L = 1 si
se incrementeaza j;
daca Xj = Xk :
dac
a Yj < Yk atunci adaug
a (Xk , Yk ) n Si+1 si se incrementeaz
a j si k;
dac
a Yj > Yk atunci adaug
a (Xj , Yj ) n Si+1 , L = 1 si se incrementeaz
a
j si k;
Programare dinamic
a
PA 2014/2015
30 / 52
Studii de caz
Rafinare
Ramane de extras solutia optima din Sn . Consideram mai ntai cazul din
exemplul de mai sus.
Se cauta n Sn = S3 perechea (Xj , Yj ) cu cel mai mare Xj pentru care
Xj M. Obtinem (Xj , Yj ) = (8, 40). Deoarece (8, 40) S3 si
(8, 40) S2 rezulta foptim (M) = foptim (8) = f3 (8) = f2 (8) si deci
x3 = 0. Perechea (Xj , Yj ) ramane neschimbata.
Pentru ca (Xj , Yj ) = (8, 40) este n S2 si nu este n S1 , rezulta ca
foptim (8) = f1 (8 w2 ) + p2 si deci x2 = 1. In continuare se ia
(Xj , Yj ) = (Xj w2 , Yj p2 ) = (8 5, 40 30) = (3, 10).
Pentru ca (Xj , Yj ) = (3, 10) este n S1 si nu este n S0 , rezulta ca
foptim (3) = f1 (3 w1 ) + p1 si deci x1 = 1.
Programare dinamic
a
PA 2014/2015
31 / 52
Studii de caz
Rafinare
Programare dinamic
a
PA 2014/2015
32 / 52
Studii de caz
Algoritmul rafinat
rucsacVD(n, w, p, valOpt, x) {
S0 = {(0, 0)};
T0 = {(w1 , p1 )};
for (i = 1; i < n; ++i) {
Si (X) = (Si1 , Ti1 )
Ti = {(X + wi , Y + pi ) | (X, Y) Si }
}
determina (Xj , Yj ) cu Xj = max{Xi | (Xi , Yi ) Sn , Xi M}
for (i = n-1; i 1; --i)
if ((Xj , Yj ) Si ) then xi+1 = 0
else {
xi+1 = 1
Xj = Xj wi+1
Yj = Yj pi+1
}
}
D. Lucanu (FII - UAIC)
Programare dinamic
a
PA 2014/2015
33 / 52
Studii de caz
P
Notam P
m = ni=0P
|Si |. Deoarece |Ti | = |Si | rezulta ca |Si+1 | 2 |Si | si
de aici i |Si | i 2i = 2n 1. Calculul lui Si din
PSi1 necesita timpul
(|Si1 |) si de aici calculul lui Sn necesita timpul i (|Si |) = O(2n ).
Deoarece profiturilePpi sunt numere ntregi, pentru orice (X , Y ) Si , Y
este ntreg si Y ji pj . Analog, pentru ca dimensiunile
Pwi sunt
numere ntregi, pentru (X , Y ) Si , X este ntreg si X ji wj .
Deoarece perechile (X , Y ) cu X > M nu intereseaza, ele pot sa nu fie
incluse n multimile Si .
Programare dinamic
a
PA 2014/2015
34 / 52
Studii de caz
i
X
j=1
wj , M
Programare dinamic
a
PA 2014/2015
35 / 52
Studii de caz
Plan
Studii de caz
Problema rucsacului II (varianta discreta)
Distanta ntre siruri
Programare dinamic
a
PA 2014/2015
36 / 52
Studii de caz
Problema
Se considera doua siruri = a1 an si = b1 bn formate cu
litere dintr-un alfabet A. Asupra sirului se pot face
urmatoarele operatii:
Stergere: S(i) sterge litera de pe pozitia i;
Inserare: I (i, c) insereaza litera c pe pozitia i;
Modificare: M(i, c) nlocuieste litera de pe pozitia i cu c.
Problema consta n determinarea unei secvente de operatii de
lungime minima care transforma pe n .
Exemplu: Fie = carnet, = paleta. O secventa de transformari este
carnet 7 par net 7 palnet 7 palet 7 paleta. Transformarile efectuate
sunt M(1, p), M(3, l), S(4) si I (6, a). Exista o alta secventa mai scurta?
sfex
Programare dinamic
a
PA 2014/2015
37 / 52
Studii de caz
Programare dinamic
a
PA 2014/2015
38 / 52
Studii de caz
Lema
Are loc:
(i) d(, ) = 0;
(ii) d(, ) = d(, );
(iii) d(, ) d(, ) + d(, ).
Observatie: Lema de mai sus arata ca d(, ) este o metrica. De aici si
numele problemei.
sfobs
Programare dinamic
a
PA 2014/2015
39 / 52
Studii de caz
Notiunea de stare
Programare dinamic
a
PA 2014/2015
40 / 52
Studii de caz
Programare dinamic
a
PA 2014/2015
41 / 52
Studii de caz
Relatia de recurenta
(
0
(i, j) =
1
, dac
a ai = bj
, dac
a ai =
6 bj
Programare dinamic
a
PA 2014/2015
42 / 52
Studii de caz
min
min
d[i yi , j yj ] + (i, j, yi , yj )
Programare dinamic
a
PA 2014/2015
43 / 52
Studii de caz
a
r
m
a
t
a
0
1
2
3
4
5
6
c
1
1
2
3
4
5
a
2
1
2
3
3
4
m
3
2
2
2
3
4
a
4
3
3
3
2
3
r
5
4
3
4
3
a
6
5
4
4
4
Programare dinamic
a
PA 2014/2015
44 / 52
Studii de caz
Programare dinamic
a
PA 2014/2015
45 / 52
Studii de caz
a
r
m
a
t
a
0
1
2
3
4
5
6
c
1
1
2
3
4
5
6
a
2
1
2
3
3
4
5
m
3
2
2
2
3
4
5
a
4
3
3
3
2
3
4
r
5
4
3
4
3
3
4
a
6
5
4
4
4
4
3
Programare dinamic
a
PA 2014/2015
46 / 52
Studii de caz
a
r
m
a
t
a
0
1
2
3
4
5
6
c
1
1
2
3
4
5
6
a
2
1
2
3
3
4
5
m
3
2
2
2
3
4
5
a
4
3
3
3
2
3
4
r
5
4
3
4
3
3
4
a
6
5
4
4
4
4
3
Programare dinamic
a
PA 2014/2015
46 / 52
Studii de caz
a
r
m
a
t
a
0
1
2
3
4
5
6
c
1
1
2
3
4
5
6
a
2
1
2
3
3
4
5
m
3
2
2
2
3
4
5
a
4
3
3
3
2
3
4
r
5
4
3
4
3
3
4
a
6
5
4
4
4
4
3
Programare dinamic
a
PA 2014/2015
46 / 52
Studii de caz
0
a 1
r 2
m 3
a 4
t 5
a 6
M(5, 0 r0 )
c
1
1
2
3
4
5
6
a
2
1
2
3
3
4
5
m
3
2
2
2
3
4
5
a
4
3
3
3
2
3
4
r
5
4
3
4
3
3
4
a
6
5
4
4
4
4
3
Programare dinamic
a
PA 2014/2015
46 / 52
Studii de caz
0
a 1
r 2
m 3
a 4
t 5
a 6
M(5, 0 r0 )
c
1
1
2
3
4
5
6
a
2
1
2
3
3
4
5
m
3
2
2
2
3
4
5
a
4
3
3
3
2
3
4
r
5
4
3
4
3
3
4
a
6
5
4
4
4
4
3
Programare dinamic
a
PA 2014/2015
46 / 52
Studii de caz
0
a 1
r 2
m 3
a 4
t 5
a 6
M(5, 0 r0 )
c
1
1
2
3
4
5
6
a
2
1
2
3
3
4
5
m
3
2
2
2
3
4
5
a
4
3
3
3
2
3
4
r
5
4
3
4
3
3
4
a
6
5
4
4
4
4
3
Programare dinamic
a
PA 2014/2015
46 / 52
Studii de caz
c a m
0 1 2 3
a 1 1 1 2
r 2 2 2 2
m 3 3 3 2
a 4 4 3 3
t 5 5 4 4
a 6 6 5 5
M(5, 0 r0 ), S(2)
a
4
3
3
3
2
3
4
r
5
4
3
4
3
3
4
a
6
5
4
4
4
4
3
Programare dinamic
a
PA 2014/2015
46 / 52
Studii de caz
c a m
0 1 2 3
a 1 1 1 2
r 2 2 2 2
m 3 3 3 2
a 4 4 3 3
t 5 5 4 4
a 6 6 5 5
M(5, 0 r0 ), S(2)
a
4
3
3
3
2
3
4
r
5
4
3
4
3
3
4
a
6
5
4
4
4
4
3
Programare dinamic
a
PA 2014/2015
46 / 52
Studii de caz
c a
0 1 2
a 1 1 1
r 2 2 2
m 3 3 3
a 4 4 3
t 5 5 4
a 6 6 5
M(5, 0 r0 ), S(2),
m a
3 4
2 3
2 3
2 3
3 2
4 3
5 4
I (1, 0 c0 )
r
5
4
3
4
3
3
4
a
6
5
4
4
4
4
3
Programare dinamic
a
PA 2014/2015
46 / 52
Studii de caz
Algoritmul
distSir(a, b, n) {
for (j = 1; j n; ++j) d[0,j] = j;
for (i = 1; i n; ++i) d[i,0] = i;
for (i = 1; i n; ++i)
for (j = 1; j n; ++j) {
= (a[i] == b[j])? 0 : 1;
d[i, j] = min{d[i 1, j] + 1, d[i 1, j 1] + , d[i, j 1] + 1}
}
L = listaVida();
i = n; j = n;
repeat
if (d[i,j] == d[i-1,j-1]) {
i = i-1; j = j-1;
} else if (d[i,j] == d[i-1,j-1]+1) {
L.pushFront(M, i, b[j]));
i = i-1; j = j-1;
} else if (d[i,j] == d[i-1,j]+1) {
L.pushFront(S, i));
i = i-1
} else {
L.pushFront(I, i, b[j]);
j = j-1;
}
until ((i = 0) && (j = 0))
} D. Lucanu (FII - UAIC)
Programare dinamic
a
PA 2014/2015
47 / 52
Studii de caz
Analiza
Teorema
Determinarea distantei optime si a secventei optime care transforma un sir
ntr-un sir , || = || = n, se poate face n timpul O(n2 ).
Programare dinamic
a
PA 2014/2015
48 / 52
Studii de caz
Variatii
alte operatii:
transpozitia: schimba ordinea a doua caractere adiacente
distanta Levenshtein (de editare)
sunt admise numai inserari, stergeri si inlocuiri
toate operatiile au costul 1
distanta Hamming
sunt admise numai nlocuirile
costul operatiei este 1
este finita ori de cate ori |a| = |b|
distanta episodica (episode distance)
sunt admise numai inserari
costul operatiei este 1
distanta este sau |b| |a| sau
D. Lucanu (FII - UAIC)
Programare dinamic
a
PA 2014/2015
49 / 52
Studii de caz
Variatii
Programare dinamic
a
PA 2014/2015
50 / 52
Studii de caz
Variatii
Programare dinamic
a
PA 2014/2015
51 / 52
Studii de caz
Variatii
procesul de cautare pentru matching aproximativ:
= p, = s
trebuie sa modificam algoritmul a.. orice pozitie j din text este startul
potential al unei potriviri; asta se realizeaza prin setarea d[0, j] = 0
calculul matricei se face pe coloane
initial: d[i, 0] = i pentru i = 0, . . . , m
se proceseaza textul caracter cu caracter
presupunem ca la pasul curent se proceseaza sj
coloana j este actualizata:
d[i, j] = (pi == sj ) ? d[i 1, j 1] :
1 + min(d[i 1, j], d[i, j 1], d[i 1, j 1])
pozitiile j pentru care d[m, j] k sunt raportate
de remarcat ca numai ultimele doua coloane sunt necesare
D. Lucanu (FII - UAIC)
Programare dinamic
a
PA 2014/2015
52 / 52