Sunteți pe pagina 1din 60

Proiectarea algoritmilor: Programare dinamica

Dorel Lucanu
Faculty of Computer Science
Alexandru Ioan Cuza University, Iasi, Romania
dlucanu@info.uaic.ro

PA 2014/2015

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

1 / 52

Outline

Prezentarea generala a paradigmei

Studii de caz
Problema rucsacului II (varianta discreta)
Distanta ntre siruri

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

2 / 52

Prezentarea general
a a paradigmei

Plan

Prezentarea generala a paradigmei

Studii de caz
Problema rucsacului II (varianta discreta)
Distanta ntre siruri

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

3 / 52

Prezentarea general
a a paradigmei

Clasa de probleme

Clasa de probleme la care se aplica include probleme de optim.

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

4 / 52

Prezentarea general
a a paradigmei

Modelul matematic

Definirea notiunii de stare, care este de fapt o generalizare a


problemei initiale si asocierea functiei obiectiv pentru stare.
Problemei trebuie sa devina un caz particular (o stare).
Definirea unei relatii de tranzitie ntre stari. O relatie s s 0 , unde s
si s 0 sunt stari, va fi numita decizie. O politica este o secventa de
decizii consecutive, adica o secventa de forma s0 s1 sn .
Unei stari s i asociem o valoare z si definim f (z) astfel ncat, daca
starea s corespunde problemei initiale, atunci
f (z) = optim R(x0 , . . . , xm1 )

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

5 / 52

Prezentarea general
a a paradigmei

Modelul matematic
4

Aplicarea Principiului de Optim pentru obtine o relatie de recurenta.


Principiul de optim (PO) afirma ca o subpolitica a unei politici
optimale este la randul ei optimala. Deoarece este posibil ca PO sa nu
aiba loc, rezulta ca trebuie verificata validitatea relatiei de recurenta.

Principiul de optim conduce la obtinerea unei ecuatii functionale de


forma:
f (z) = optim [H(z, y , f (T (z, y )))]
(1)
y

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

Relatia de mai sus poate fi interpretata astfel: dintre toate deciziile


care se pot lua n starea s (sau care conduc la starea s), se alege una
care da valoarea optima n conditiile n care politica aplicata n
continuare (sau pana atunci) este este si ea optima.

Relatia (1) poate fi dovedita utilizand inductia si reducerea la absurd.


Deoarece este posibil ca formularile pentru T () si sau H() sa fie
neadecvate, ducand la cazul n care principiul de optim nu are loc,
este necesara verificarea acestuia pentru problema supusa rezolvarii.

Rezolvarea ecuatiilor recurente (1) conduce la determinarea unui sir


de decizii ce n final constituie politica optima prin care se determina
valoarea functiei obiectiv.

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

7 / 52

Prezentarea general
a a paradigmei

Modelul matematic

Calculul recurentei rezolvand problemele de la mic la mare si


memorand valorile obtinute ntr-un tablou. Nu se recomanda scrierea
unui program recursiv care sa calculeze valorile optime. Daca n
secventa de decizii luate, o anumita problema apare de mai multe ori,
ea va fi calculata de algoritmul recursiv de cate ori apare.
Exemplu cu numerele Fibonacci: pe tabla

10

Extragerea solutiei optime din tablou utilizand proprietatea de


substructura optima a solutiei, care afirma ca solutia optima a
problemei include solutiile optime ale subproblemelor sale. De
remarcat ca proprietatea de substructura optima este echivalenta cu
principiul de optim.

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

8 / 52

Studii de caz

Plan

Prezentarea generala a paradigmei

Studii de caz
Problema rucsacului II (varianta discreta)
Distanta ntre siruri

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

9 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Plan

Prezentarea generala a paradigmei

Studii de caz
Problema rucsacului II (varianta discreta)
Distanta ntre siruri

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

10 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Problema

Se considera n obiecte 1, . . . , n de dimensiuni (greutati)


w1 , . . . , wn Z+ , respectiv, si un rucsac de capacitate M Z+ .
Un obiect i sau este introdus n totalitate n rucsac, xi = 1, sau
nu este introdus de loc, xi = 0, astfel ca o umplere a rucsacului
const
P a dintr-o secventa x1 , . . . , xn cu xi {0, 1} si
si n cazul continuu, introducereaP
obiectului i
i xi wi M. Ca
n rucsac aduce profitul pi Z iar profitul total este ni=1 xi pi .
Problema consta n a determina o alegere (x1 , . . . , xn ) care sa
aduca un profit maxim.
Deci, singura deosebire fata de varianta continua studiata la metoda
greedy consta n conditia xi {0, 1} n loc de xi [0, 1].

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

11 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

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

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

12 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Definirea notiunii de stare


Rucsac(j, X ) reprezinta urmatoarea problema, care este o generalizare a
celei initiale:
functia obiectiv:
max

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

Problema rucsacului II (varianta discret


a)

Definirea notiunilor de decizie si relatia de tranzitie

Presupunem j > 0. Consideram decizia optima prin care starea


Rucsac(j, X ) este transformata n Rucsac(j 1, ?).
Notam cu (x1 , . . . , xj ) alegerea care da valoarea optima fj (X ).

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

14 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Aplicarea principiului de optim

Daca xj = 0 (obiectul j nu este pus n rucsac) atunci, conform principiului


de optim, fj (X ) este valoarea optima pentru starea Rucsac(X , j 1) si
de aici fj (X ) = fj1 (X ).
Daca xj = 1 (obiectul j este pus n rucsac) atunci, din nou conform
principiului de optim, fj (X ) este valoarea optima pentru starea
Rucsac(j 1, X wj ) la care se adauga profitul pi si de aici
fj (X ) = fj1 (X wj ) + pj .

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

15 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Obtinerea recurentei

Combinand relatiile de mai sus obtinem:

, dac
aX <0

fj (X ) = 0
, dac
a j = 0 si X 0 (2)

max{fj1 (X ), fj1 (X wj ) + pj } , dac


a j > 0 si X 0
Am considerat fj (X ) = daca X < 0.

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

16 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

(2) ca instanta a relatiei (1)


Reamintim (1):
f (z) = optim [H(z, y , f (T (z, y )))]
y

valoarea z asociata starii s este (j, X )


valoarea T (y , z) asociata starii s 0 este (j 1, X y wj )
algoritmul H este fj1 (X y wj ) + y pj , unde y {0, 1}
optim este max
y

y {0,1}

care duce la scrierea mai concisa pentru cazul j > 0 si X 0:


fj (X ) = max fj1 (X y wj ) + y pj
y {0,1}

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

17 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Rezolvarea problemelor de la mic la mare si memorarea


rezultatelor n tabel
Fie M = 10, n = 3 si greutatile si profiturile date de urmatorul tabel:
i
wi
pi

1
3
10

2
5
30

3
6
20

Valorile optime pentru subprobleme sunt calculate cu ajutorul relatiilor 2 si


pot fi memorate ntr-un tablou bidimensional astfel:
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

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

Problema rucsacului II (varianta discret


a)

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.

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

19 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Rafinare

In continuare ne punem problema memorarii mai compacte a acestui


tablou. Construim graficele functiilor f0 , f1 , f2 si f3 pentru exemplul de mai
sus. Avem:
(
, X < 0
f0 (X ) =
0
,X 0
Notam cu g0 functia data de:
(
, X < 3
g0 (X ) = f0 (X w1 ) + p1 =
10
,3 X

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

20 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Rafinare

Graficele functiilor f0 si g0 :
6

10
-

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

21 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

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

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

22 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Rafinare

Graficele functiilor f1 si g1 :
6

40
30
10

10
-

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

23 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

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

Problema rucsacului II (varianta discret


a)

Rafinare

Graficele functiilor f2 si g2 :
6

60
50
40
30
20
10

40
30
10
-

D. Lucanu (FII - UAIC)

Programare dinamic
a

56

89

11

PA 2014/2015

14

25 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Rafinare

Functia f3 se calculeaza prin:

10
f3 (X ) = max{f2 (X ), g2 (X )} = 30

40

50

60

D. Lucanu (FII - UAIC)

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

Problema rucsacului II (varianta discret


a)

Rafinare
Graficul functiei f3 :
6

60
50
40
30
10
-

D. Lucanu (FII - UAIC)

11

14

Programare dinamic
a

PA 2014/2015

27 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

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

O multime care reprezinta o functie n scara contine acele puncte n care


functia face salturi. Graficul functiei gi se obtine din graficul functiei fi
printr-o translatie iar graficul functiei fi+1 se obtine prin interclasarea
graficelor functiilor fi si gi .
D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

28 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

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.

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

29 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

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 Xj > Xk atunci, daca Yk > Yj adauga (Xk , Yk ) n Si+1 , L = 2 si


se incrementeaza 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;

daca Xj > Xk atunci adauga (Xk , Yk ) n Si+1 si se incrementeaza k;


D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

30 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

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.

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

31 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Rafinare

Metoda poate fi descrisa pentru cazul general:


Initial se determina perechea (Xj , Yj ) Sn cu cel mai mare Xj pentru
care Xj M. Valoarea Yj constituie ncarcarea optima a rucsacului,
i.e. valoarea functiei obiectiv din problema initiala.
Pentru i = n 1, . . . , 0:
daca (Xj , Yj ) este n Si , atunci fi+1 (Xj ) = fi (Xj ) = Yj si se face
xi+1 = 0 (obiectul i + 1 nu este ales);
daca (Xj , Yj ) nu este n Si , atunci fi+1 (Xj ) = fi (Xj wi+1 ) + pi+1 = Yj
si se face xi+1 = 1 (obiectul i + 1 este ales), Xj = Xj wi+1 si
Yj = Yj pi+1 .

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

32 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

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

Problema rucsacului II (varianta discret


a)

Analiza algoritmului rafinat

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 .

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

34 / 52

Studii de caz

Problema rucsacului II (varianta discret


a)

Analiza algoritmului rafinat


De aici rezulta ca numarul maxim de perechi (X , Y ) distincte din Si
satisface relatiile:
P
|Si | 1 + ij=1 wj
|Si | M
care implica
|Si | 1 + min

i
X

j=1

wj , M

Relatia de mai sus permite o estimare mai precisa a spatiului necesar


pentru memorarea multimilor Si n cazul unor probleme concrete. In ceea
ce priveste timpul,P
facand calculele rezulta ca algoritmul are complexitatea
timp O(min(2n , n ni=1 pi , nM)).

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

35 / 52

Studii de caz

Distanta ntre siruri

Plan

Prezentarea generala a paradigmei

Studii de caz
Problema rucsacului II (varianta discreta)
Distanta ntre siruri

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

36 / 52

Studii de caz

Distanta ntre siruri

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

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

37 / 52

Studii de caz

Distanta ntre siruri

Analiza domeniului problemei


Lema
Fie s = (. . . T (i, ), T 0 (j, ) . . .) o secventa optima (de lungime minima)
care transforma pe n . Atunci exista k, ` astfel ncat secventa
s 0 = (. . . T 0 (k, ), T (`, ) . . .), obtinuta din s prin interschimbarea celor
doua operatii T si T 0 si n rest ramanand neschimbata, este de asemenea
o secventa optima care transforma pe n .
Corolar
Exista o secventa optima care daca efectueaza transformarile:
= 0 7 1 7 7 t =
atunci pentru orice i, |i | ||, unde prin | | am notat lungimea sirului .

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

38 / 52

Studii de caz

Distanta ntre siruri

Analiza domeniului problemei

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

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

39 / 52

Studii de caz

Distanta ntre siruri

Notiunea de stare

DS(i , j ) corespunzatoare transformarii subsirului i = a1 . . . ai n


j = b1 . . . bj si prin d[i, j] valoarea optima d(i , j ).
Daca i = 0, 0 este sirul vid si j se obtine prin j inserari: deci d[0, j] = j.
Daca j = 0, atunci j se obtine prin i stergeri si avem d[i, 0] = i.
In continuare presupunem i, j > 0.

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

40 / 52

Studii de caz

Distanta ntre siruri

Decziile si Principiul de optim


Consideram decizia optima prin care starea DS(a1 . . . ai , b1 . . . bj ) este
transformata ntr-o stare DS(a1 . . . ai 0 , b1 . . . bj 0 ) cu (i 0 < i si j 0 j) sau
(i 0 i si j 0 < j).
Distingem urmatoarele situatii:
1 Dac
a ai = bj atunci i 0 = i 1, j 0 = j 1 si, aplicand principiul de
optim, obtinem d[i, j] = d[i 1, j 1].
2 DS(a , . . . , a , b , . . . , b ) se obt
ine prin stergere. Rezulta
1
i 1
j
i 0 = i 1, j 0 = j si, aplicand principiul de optim, obtinem
d[i, j] = d[i 1, j] + 1.
3 DS(a , . . . , a , b , . . . , b ) se obt
ine prin inserare. Avem
1
i 1
j
i 0 = i, j 0 = j 1 si, aplicand principiul de optim, obtinem
d[i, j] = d[i, j 1] + 1. Din corolarul lemei precedente rezulta ca
aceasta operatie poate fi realizata numai daca i < j.
4 DS(a , . . . , a , b , . . . , b ) se obt
ine prin modificare. Avem
1
i 1
j
0
0
i = i 1, j = j 1 si, aplicand principiul de optim, obtinem
d[i, j] = d[i 1, j 1] + 1.
D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

41 / 52

Studii de caz

Distanta ntre siruri

Relatia de recurenta

Deoarece d[i, j] trebuie sa fie minima, rezulta:


d[i, j] = min{d[i 1, j] + 1, d[i 1, j 1] + (i, j), d[i, j 1] + 1} (3)
unde

D. Lucanu (FII - UAIC)

(
0
(i, j) =
1

, dac
a ai = bj
, dac
a ai =
6 bj

Programare dinamic
a

PA 2014/2015

42 / 52

Studii de caz

Distanta ntre siruri

(3) ca instanta a relatiei (1)


Reamintim (1):
f (z) = optim [H(z, y , f (T (z, y )))]
y

valoarea z asociata starii s este [i, j]


valoarea T (y , z) asociata starii s 0 este [i yi , j yj ], unde
yi , yj {0, 1}, yi + yj > 0
algoritmul H este d[i yi , j yj ] + (i, j, yi , yj ), unde
(
0 , dac
a ai = bj yi + yj = 2
(i, j, yi , yj ) =
1 , dac
a (ai 6= bj yi + yj = 2) yi + yj = 1
optim este
y

min

yi ,yj {0,1},yi +yj >0

care duce la scrierea mai concisa pentru cazul i, j > 0:


d[i, j] =
D. Lucanu (FII - UAIC)

min

yi ,yj {0,1},yi +yj >0

d[i yi , j yj ] + (i, j, yi , yj )

Programare dinamic
a

PA 2014/2015

43 / 52

Studii de caz

Distanta ntre siruri

Calculul lui d[i,j]: exemplu

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

D. Lucanu (FII - UAIC)

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

Distanta ntre siruri

Determinarea secventei optime

Notam cu L lista care nregistreaza transformarile solutiei optime. Se


procedeaza n modul urmator:
initial se considera i = n; j = n; si L = ( ) (lista vida);
urmatorul proces se repeta pana cand i si j devin 0:
daca d[i, j] = d[i 1, j 1] atunci L ramane neschimbata si se face
i = i-1; j = j-1;
altfel, daca d[i, j] = d[i 1, j 1] + 1 atunci se face L = (M(i, bj ), L)
si i = i-1; j = j-1;
altfel, daca d[i, j] = d[i 1, j] + 1 atunci se face L = (S(i), L) si
i = i-1;
altfel, daca d[i, j] = d[i, j 1] + 1 atunci se face L = (I (i, bj ), L) si
j = j-1.

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

45 / 52

Studii de caz

Distanta ntre siruri

Determinarea secventei optime: exemplu

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

D. Lucanu (FII - UAIC)

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

Distanta ntre siruri

Determinarea secventei optime: exemplu

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

D. Lucanu (FII - UAIC)

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

Distanta ntre siruri

Determinarea secventei optime: exemplu

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

D. Lucanu (FII - UAIC)

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

Distanta ntre siruri

Determinarea secventei optime: exemplu

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

D. Lucanu (FII - UAIC)

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

Distanta ntre siruri

Determinarea secventei optime: exemplu

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

D. Lucanu (FII - UAIC)

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

Distanta ntre siruri

Determinarea secventei optime: exemplu

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

D. Lucanu (FII - UAIC)

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

Distanta ntre siruri

Determinarea secventei optime: exemplu

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)

D. Lucanu (FII - UAIC)

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

Distanta ntre siruri

Determinarea secventei optime: exemplu

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)

D. Lucanu (FII - UAIC)

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

Distanta ntre siruri

Determinarea secventei optime: exemplu

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 )

D. Lucanu (FII - UAIC)

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

Distanta ntre siruri

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

Distanta ntre siruri

Analiza

Teorema
Determinarea distantei optime si a secventei optime care transforma un sir
ntr-un sir , || = || = n, se poate face n timpul O(n2 ).

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

48 / 52

Studii de caz

Distanta ntre siruri

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

Distanta ntre siruri

Variatii

distanta data de cea mai lunga subsecventa


sunt admise numai inserari si stergeri
toate operatiile au costul 1
Exemplu: = amxbtycsnma si = bancxstymcxn
= amxbtycsnma bamxbtycsnma baxbtycsnma
banxbtycsnma bancxbtycsnma bancxtycsnma
bancxstycsnma bancxstymcsnma bancxstymcnma
bancxstymcxnma bancxstymcxna bancxstymcxn =
(a,x,t,y,c,n) este subsecventa comuna
este cea mai lunga?

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

50 / 52

Studii de caz

Distanta ntre siruri

Variatii

matching aproximativ peste siruri (aproximate string matching)


problema: dat un text s de lungime n, un patern p de lungime m, o
distanta d() ntre siruri si un numar k, sa se determine pozitiile j din
textul s astfel ncat sa existe i cu d(p, s[i..j]) k
distanta Levenshtein: string matching with k differences
distanta Hamming: string matching with k missmatches
distanta episodica: episode matching (modeleaza cazul cand se cauta o
secventa de evenimente intr-o perioada scurta de timp)
cea mai lunga subsecventa comuna: exact ce spune numele

D. Lucanu (FII - UAIC)

Programare dinamic
a

PA 2014/2015

51 / 52

Studii de caz

Distanta ntre siruri

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

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