[10] prog-din

60
Proiectarea algoritmilor: Programare dinamic˘ a Dorel Lucanu Faculty of Computer Science Alexandru Ioan Cuza University, Ia¸ si, Romania [email protected] PA 2014/2015 D. Lucanu (FII - UAIC) Programare dinamic˘ a PA 2014/2015 1 / 52

description

[10] prog-din

Transcript of [10] prog-din

  • Proiectarea algoritmilor: Programare dinamica

    Dorel Lucanu

    Faculty of Computer ScienceAlexandru Ioan Cuza University, Iasi, Romania

    [email protected]

    PA 2014/2015

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 1 / 52

  • Outline

    1 Prezentarea generala a paradigmei

    2 Studii de cazProblema rucsacului II (varianta discreta)Distanta ntre siruri

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 2 / 52

  • Prezentarea generala a paradigmei

    Plan

    1 Prezentarea generala a paradigmei

    2 Studii de cazProblema rucsacului II (varianta discreta)Distanta ntre siruri

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 3 / 52

  • Prezentarea generala a paradigmei

    Clasa de probleme

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

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 4 / 52

  • Prezentarea generala a paradigmei

    Modelul matematic

    1 Definirea notiunii de stare, care este de fapt o generalizare aproblemei initiale si asocierea functiei obiectiv pentru stare.Problemei trebuie sa devina un caz particular (o stare).

    2 Definirea unei relatii de tranzitie ntre stari. O relatie s s , unde ssi s sunt stari, va fi numita decizie. O politica este o secventa dedecizii consecutive, adica o secventa de forma s0 s1 sn.

    3 Unei stari s i asociem o valoare z si definim f (z) astfel ncat, dacastarea s corespunde problemei initiale, atunci

    f (z) = optim R(x0, . . . , xm1)

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 5 / 52

  • Prezentarea generala 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 politicioptimale este la randul ei optimala. Deoarece este posibil ca PO sa nuaiba loc, rezulta ca trebuie verificata validitatea relatiei de recurenta.

    5 Principiul de optim conduce la obtinerea unei ecuatii functionale deforma:

    f (z) = optimy

    [H(z , y , f (T (z , y)))] (1)

    unde:

    s si s sunt doua stari astfel ncat una se obtine din cealalta aplicanddecizia d ,z este valoarea asociata starii s,T (z , y) calculeaza valoarea starii s , iarH exprima algoritmul de calcul al valorii f (z) dat de decizia d .

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 6 / 52

  • Prezentarea generala a paradigmei

    Modelul matematic

    6 Relatia de mai sus poate fi interpretata astfel: dintre toate deciziilecare se pot lua n starea s (sau care conduc la starea s), se alege unacare da valoarea optima n conditiile n care politica aplicata ncontinuare (sau pana atunci) este este si ea optima.

    7 Relatia (1) poate fi dovedita utilizand inductia si reducerea la absurd.Deoarece este posibil ca formularile pentru T () si sau H() sa fieneadecvate, ducand la cazul n care principiul de optim nu are loc,este necesara verificarea acestuia pentru problema supusa rezolvarii.

    8 Rezolvarea ecuatiilor recurente (1) conduce la determinarea unui sirde decizii ce n final constituie politica optima prin care se determinavaloarea functiei obiectiv.

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 7 / 52

  • Prezentarea generala a paradigmei

    Modelul matematic

    9 Calculul recurentei rezolvand problemele de la mic la mare simemorand valorile obtinute ntr-un tablou. Nu se recomanda scriereaunui program recursiv care sa calculeze valorile optime. Daca nsecventa 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 desubstructura optima a solutiei, care afirma ca solutia optima aproblemei include solutiile optime ale subproblemelor sale. Deremarcat ca proprietatea de substructura optima este echivalenta cuprincipiul de optim.

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 8 / 52

  • Studii de caz

    Plan

    1 Prezentarea generala a paradigmei

    2 Studii de cazProblema rucsacului II (varianta discreta)Distanta ntre siruri

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 9 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Plan

    1 Prezentarea generala a paradigmei

    2 Studii de cazProblema rucsacului II (varianta discreta)Distanta ntre siruri

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 10 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    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, saunu este introdus de loc, xi = 0, astfel ca o umplere a rucsaculuiconsta dintr-o secventa x1, . . . , xn cu xi {0, 1} si

    i xi wi M. Ca si n cazul continuu, introducerea obiectului in rucsac aduce profitul pi Z iar profitul total este

    ni=1 xipi .

    Problema consta n a determina o alegere (x1, . . . , xn) care saaduca un profit maxim.

    Deci, singura deosebire fata de varianta continua studiata la metodagreedy consta n conditia xi {0, 1} n loc de xi [0, 1].

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 11 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Formularea matematica

    functia obiectiv:

    maxn

    i=1

    xi pi

    restrictii:n

    i=1xi wi M

    xi {0, 1}, i = 1, . . . , nwi Z+, pi Z, i = 1, . . . , nM Z

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 12 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Definirea notiunii de stare

    Rucsac(j ,X ) reprezinta urmatoarea problema, care este o generalizare acelei initiale:

    functia obiectiv:

    max

    ji=1

    xi pi

    restrictii:j

    i=1xi wi X

    xi {0, 1}, i = 1, . . . , jwi Z+, pi Z, i = 1, . . . , jX Z

    Cu fj(X ) notam valoarea optima pentru instanta Rucsac(j ,X ). Dacaj = 0 si X 0, atunci fj(X ) = 0.

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 13 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Definirea notiunilor de decizie si relatia de tranzitie

    Presupunem j > 0. Consideram decizia optima prin care stareaRucsac(j ,X ) este transformata n Rucsac(j 1, ?).

    Notam cu (x1, . . . , xj) alegerea care da valoarea optima fj(X ).

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 14 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Aplicarea principiului de optim

    Daca xj = 0 (obiectul j nu este pus n rucsac) atunci, conform principiuluide optim, fj(X ) este valoarea optima pentru starea Rucsac(X , j 1) side aici fj(X ) = fj1(X ).

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

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 15 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Obtinerea recurentei

    Combinand relatiile de mai sus obtinem:

    fj(X ) =

    , daca X < 00 , daca j = 0 si X 0max{fj1(X ), fj1(X wj) + pj} , daca j > 0 si X 0

    (2)

    Am considerat fj(X ) = daca X < 0.

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 16 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    (2) ca instanta a relatiei (1)

    Reamintim (1):

    f (z) = optimy

    [H(z , y , f (T (z , y)))]

    valoarea z asociata starii s este (j ,X )

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

    yeste max

    y{0,1}care duce la scrierea mai concisa pentru cazul j > 0 si X 0:

    fj(X ) = maxy{0,1}

    fj1(X y wj) + y pj

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 17 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rezolvarea problemelor de la mic la mare si memorarearezultatelor n tabel

    Fie M = 10, n = 3 si greutatile si profiturile date de urmatorul tabel:

    i 1 2 3

    wi 3 5 6pi 10 30 20

    Valorile optime pentru subprobleme sunt calculate cu ajutorul relatiilor 2 sipot fi memorate ntr-un tablou bidimensional astfel:

    X 0 1 2 3 4 5 6 7 8 9 10

    f0 0 0 0 0 0 0 0 0 0 0 0

    f1 0 0 0 10 10 10 10 10 10 10 10

    f2 0 0 0 10 10 30 30 30 40 40 40

    f3 0 0 0 10 10 30 30 30 40 40 40

    Tabloul de mai sus este calculat linie cu linie: pentru a calcula valorile depe o linie sunt consultate numai valorile de pe linia precedenta.

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 18 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Analiza

    Tabloul de mai sus are dimensiunea n m (au fost ignorate prima linie siprima coloana). Daca m = O(2n) rezulta ca atat complexitatea spatiu catsi cea timp sunt exponentiale. Privind tabloul de mai sus observam caexista multe valori care se repeta.

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 19 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    In continuare ne punem problema memorarii mai compacte a acestuitablou. Construim graficele functiilor f0, f1, f2 si f3 pentru exemplul de maisus. Avem:

    f0(X ) =

    { ,X < 00 ,X 0

    Notam cu g0 functia data de:

    g0(X ) = f0(X w1) + p1 ={ ,X < 310 , 3 X

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 20 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    Graficele functiilor f0 si g0:

    6 6

    3

    10--

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 21 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    Functia f1 se calculeaza prin:

    f1(X ) = max{f0(X ), g0(X )} =

    ,X < 00 , 0 X < 310 , 3 X

    Notam cu g1 functia data prin:

    g1(X ) = f1(X w2) + p2 =

    ,X < 530 , 5 X < 840 , 8 X

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 22 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    Graficele functiilor f1 si g1:

    6

    3

    10-

    6

    3

    10-

    5

    3040

    8

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 23 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    Functia f2 se calculeaza prin:

    f2(X ) = max{f1(X ), g1(X )} =

    ,X < 00 , 0 X < 310 , 3 X < 530 , 5 X < 840 , 8 X

    In continuare, notam cu g2 functia data prin:

    g2(X ) = f2(X w3) + p3 =

    ,X < 620 , 6 X < 930 , 9 X < 1150 , 11 X < 1460 , 14 X

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 24 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    Graficele functiilor f2 si g2:

    6

    3

    10-

    6

    3

    10-

    5

    30405060

    85

    3040

    8 6 9 11 14

    20

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 25 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    Functia f3 se calculeaza prin:

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

    ,X < 00 , 0 X < 310 , 3 X < 530 , 5 X < 840 , 8 < X 1150 , 11 X < 1460 , 14 X

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 26 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    Graficul functiei f3:

    6

    3

    10-

    5

    30

    40

    8

    50

    60

    11 14

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 27 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    Se remarca faptul ca functiile fi si gi sunt functii n scara. Graficele acestorfunctii pot fi reprezentate prin multimi finite din puncte din plan. Deexemplu, graficul functiei f2 este reprezentat prin multimea{(0, 0), (3, 10), (5, 30), (8, 40)}.

    X 0 1 2 3 4 5 6 7 8 9 10

    f0 0 0 0 0 0 0 0 0 0 0 0f1 0 0 0 10 10 10 10 10 10 10 10f2 0 0 0 10 10 30 30 30 40 40 40f3 0 0 0 10 10 30 30 30 40 40 40

    O multime care reprezinta o functie n scara contine acele puncte n carefunctia face salturi. Graficul functiei gi se obtine din graficul functiei fiprintr-o translatie iar graficul functiei fi+1 se obtine prin interclasareagraficelor functiilor fi si gi .

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 28 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    In general, fiecare fi este complet specificat de o multimeSi = {(Xj ,Yj) | j = 0, . . . , r} unde Yj = fi (Xj).Presupunem X1 < < Xr .Analog, functiile gi sunt reprezentate prin multimileTi = {(X + wi ,Y + pi ) | (X ,Y ) Si}.Notam Ti = (Si ) si Si+1 = (Si ,Ti ). Multimea Si+1 se obtine din Si siTi prin interclasare.

    Algoritmul pentru :

    Se considera o variabila L care ia valoarea 1 daca graficul lui fi+1 coincidecu 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 dinamica PA 2014/2015 29 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    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 :

    daca Yj > Yk atunci adauga (Xj ,Yj) n Si+1 si se incrementeaza j si k;daca Yj < Yk atunci adauga (Xk ,Yk) n Si+1, L = 2 si seincrementeaza j si k;

    daca Xj > Xk atunci, daca Yk > Yj adauga (Xk ,Yk) n Si+1, L = 2 sise incrementeaza k ;

    daca L = 2:daca Xj < Xk atunci, daca Yj > Yk adauga (Xj ,Yj) n Si+1, L = 1 sise incrementeaza j ;daca Xj = Xk :

    daca Yj < Yk atunci adauga (Xk ,Yk) n Si+1 si se incrementeaza j si k;daca Yj > Yk atunci adauga (Xj ,Yj) n Si+1, L = 1 si se incrementeazaj si k;

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

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 30 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    Ramane de extras solutia optima din Sn. Consideram mai ntai cazul dinexemplul de mai sus.

    Se cauta n Sn = S3 perechea (Xj ,Yj) cu cel mai mare Xj pentru careXj M. Obtinem (Xj ,Yj) = (8, 40). Deoarece (8, 40) S3 si(8, 40) S2 rezulta foptim(M) = foptim(8) = f3(8) = f2(8) si decix3 = 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 cafoptim(3) = f1(3 w1) + p1 si deci x1 = 1.

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 31 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Rafinare

    Metoda poate fi descrisa pentru cazul general:

    Initial se determina perechea (Xj ,Yj) Sn cu cel mai mare Xj pentrucare 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 facexi+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 = Yjsi se face xi+1 = 1 (obiectul i + 1 este ales), Xj = Xj wi+1 siYj = Yj pi+1.

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 32 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    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 = 0else {

    xi+1 = 1Xj = Xj wi+1Yj = Yj pi+1

    }}

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 33 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Analiza algoritmului rafinat

    Notam m =n

    i=0 |Si |. Deoarece |Ti | = |Si | rezulta ca |Si+1| 2 |Si | side aici

    i |Si |

    i 2

    i = 2n 1. Calculul lui Si din Si1 necesita timpul(|Si1|) si de aici calculul lui Sn necesita timpul

    i (|Si |) = O(2n).

    Deoarece profiturile pi sunt numere ntregi, pentru orice (X ,Y ) Si , Yeste ntreg si Y ji pj . Analog, pentru ca dimensiunile wi suntnumere 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 fieincluse n multimile Si .

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 34 / 52

  • Studii de caz Problema rucsacului II (varianta discreta)

    Analiza algoritmului rafinat

    De aici rezulta ca numarul maxim de perechi (X ,Y ) distincte din Sisatisface relatiile:

    |Si | 1 +i

    j=1 wj|Si | M

    care implica

    |Si | 1 + min

    ij=1

    wj ,M

    Relatia de mai sus permite o estimare mai precisa a spatiului necesarpentru memorarea multimilor Si n cazul unor probleme concrete. In ceeace priveste timpul, facand calculele rezulta ca algoritmul are complexitateatimp O(min(2n, n

    ni=1 pi , nM)).

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 35 / 52

  • Studii de caz Distanta ntre siruri

    Plan

    1 Prezentarea generala a paradigmei

    2 Studii de cazProblema rucsacului II (varianta discreta)Distanta ntre siruri

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 36 / 52

  • Studii de caz Distanta ntre siruri

    Problema

    Se considera doua siruri = a1 an si = b1 bn formate culitere dintr-un alfabet A. Asupra sirului se pot faceurmatoarele 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 delungime minima care transforma pe n .

    Exemplu: Fie = carnet, = paleta. O secventa de transformari estecarnet 7 parnet 7 palnet 7 palet 7 paleta. Transformarile efectuatesunt M(1, p),M(3, l),S(4) si I (6, a). Exista o alta secventa mai scurta?

    sfex

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 37 / 52

  • Studii de caz Distanta ntre siruri

    Analiza domeniului problemei

    Lema

    Fie s = (. . .T (i , ),T (j , ) . . .) o secventa optima (de lungime minima)care transforma pe n . Atunci exista k , ` astfel ncat secventas = (. . .T (k , ),T (`, ) . . .), obtinuta din s prin interschimbarea celordoua operatii T si T si n rest ramanand neschimbata, este de asemeneao 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 dinamica 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 dinamica PA 2014/2015 39 / 52

  • Studii de caz Distanta ntre siruri

    Notiunea de stare

    DS(i , j) corespunzatoare transformarii subsirului i = a1 . . . ai nj = 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 dinamica 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) estetransformata ntr-o stare DS(a1 . . . ai , b1 . . . bj ) cu (i

    < i si j j) sau(i i si j < j).Distingem urmatoarele situatii:

    1 Daca ai = bj atunci i = i 1, j = j 1 si, aplicand principiul de

    optim, obtinem d [i , j ] = d [i 1, j 1].2 DS(a1, . . . , ai , b1, . . . , bj) se obtine prin stergere. Rezulta

    i = i 1, j = j si, aplicand principiul de optim, obtinemd [i , j ] = d [i 1, j ] + 1.

    3 DS(a1, . . . , ai , b1, . . . , bj) se obtine prin inserare. Avemi = i , j = j 1 si, aplicand principiul de optim, obtinemd [i , j ] = d [i , j 1] + 1. Din corolarul lemei precedente rezulta caaceasta operatie poate fi realizata numai daca i < j .

    4 DS(a1, . . . , ai , b1, . . . , bj) se obtine prin modificare. Avemi = i 1, j = j 1 si, aplicand principiul de optim, obtinemd [i , j ] = d [i 1, j 1] + 1.

    D. Lucanu (FII - UAIC) Programare dinamica 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

    (i , j) =

    {0 ,daca ai = bj

    1 ,daca ai 6= bj

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 42 / 52

  • Studii de caz Distanta ntre siruri

    (3) ca instanta a relatiei (1)

    Reamintim (1):

    f (z) = optimy

    [H(z , y , f (T (z , y)))]

    valoarea z asociata starii s este [i , j ]valoarea T (y , z) asociata starii s este [i yi , j yj ], undeyi , yj {0, 1}, yi + yj > 0algoritmul H este d [i yi , j yj ] + (i , j , yi , yj), unde

    (i , j , yi , yj) =

    {0 ,daca ai = bj yi + yj = 21 ,daca (ai 6= bj yi + yj = 2) yi + yj = 1

    optimy

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

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

    d [i , j ] = minyi ,yj{0,1},yi+yj>0

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

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 43 / 52

  • Studii de caz Distanta ntre siruri

    Calculul lui d[i,j]: exemplu

    c a m a r a

    0 1 2 3 4 5 6

    a 1 1 1 2 3 4 5

    r 2 2 2 2 3 3 4

    m 3 3 3 2 3 4 4

    a 4 4 3 3 2 3 4

    t 5 5 4 4 3

    a 6

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 44 / 52

  • Studii de caz Distanta ntre siruri

    Determinarea secventei optime

    Notam cu L lista care nregistreaza transformarile solutiei optime. Seprocedeaza 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 facei = 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) sii = i-1;

    altfel, daca d [i , j ] = d [i , j 1] + 1 atunci se face L = (I (i , bj), L) sij = j-1.

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 45 / 52

  • Studii de caz Distanta ntre siruri

    Determinarea secventei optime: exemplu

    c a m a r a

    0 1 2 3 4 5 6

    a 1 1 1 2 3 4 5

    r 2 2 2 2 3 3 4

    m 3 3 3 2 3 4 4

    a 4 4 3 3 2 3 4

    t 5 5 4 4 3 3 4

    a 6 6 5 5 4 4 3

    M(5, r), S(2), I (1, c)

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 46 / 52

  • Studii de caz Distanta ntre siruri

    Determinarea secventei optime: exemplu

    c a m a r a

    0 1 2 3 4 5 6

    a 1 1 1 2 3 4 5

    r 2 2 2 2 3 3 4

    m 3 3 3 2 3 4 4

    a 4 4 3 3 2 3 4

    t 5 5 4 4 3 3 4

    a 6 6 5 5 4 4 3

    M(5, r), S(2), I (1, c)

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 46 / 52

  • Studii de caz Distanta ntre siruri

    Determinarea secventei optime: exemplu

    c a m a r a

    0 1 2 3 4 5 6

    a 1 1 1 2 3 4 5

    r 2 2 2 2 3 3 4

    m 3 3 3 2 3 4 4

    a 4 4 3 3 2 3 4

    t 5 5 4 4 3 3 4

    a 6 6 5 5 4 4 3

    M(5, r), S(2), I (1, c)

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 46 / 52

  • Studii de caz Distanta ntre siruri

    Determinarea secventei optime: exemplu

    c a m a r a

    0 1 2 3 4 5 6

    a 1 1 1 2 3 4 5

    r 2 2 2 2 3 3 4

    m 3 3 3 2 3 4 4

    a 4 4 3 3 2 3 4

    t 5 5 4 4 3 3 4

    a 6 6 5 5 4 4 3

    M(5, r)

    , S(2), I (1, c)

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 46 / 52

  • Studii de caz Distanta ntre siruri

    Determinarea secventei optime: exemplu

    c a m a r a

    0 1 2 3 4 5 6

    a 1 1 1 2 3 4 5

    r 2 2 2 2 3 3 4

    m 3 3 3 2 3 4 4

    a 4 4 3 3 2 3 4

    t 5 5 4 4 3 3 4

    a 6 6 5 5 4 4 3

    M(5, r)

    , S(2), I (1, c)

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 46 / 52

  • Studii de caz Distanta ntre siruri

    Determinarea secventei optime: exemplu

    c a m a r a

    0 1 2 3 4 5 6

    a 1 1 1 2 3 4 5

    r 2 2 2 2 3 3 4

    m 3 3 3 2 3 4 4

    a 4 4 3 3 2 3 4

    t 5 5 4 4 3 3 4

    a 6 6 5 5 4 4 3

    M(5, r)

    , S(2), I (1, c)

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 46 / 52

  • Studii de caz Distanta ntre siruri

    Determinarea secventei optime: exemplu

    c a m a r a

    0 1 2 3 4 5 6

    a 1 1 1 2 3 4 5

    r 2 2 2 2 3 3 4

    m 3 3 3 2 3 4 4

    a 4 4 3 3 2 3 4

    t 5 5 4 4 3 3 4

    a 6 6 5 5 4 4 3

    M(5, r), S(2)

    , I (1, c)

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 46 / 52

  • Studii de caz Distanta ntre siruri

    Determinarea secventei optime: exemplu

    c a m a r a

    0 1 2 3 4 5 6

    a 1 1 1 2 3 4 5

    r 2 2 2 2 3 3 4

    m 3 3 3 2 3 4 4

    a 4 4 3 3 2 3 4

    t 5 5 4 4 3 3 4

    a 6 6 5 5 4 4 3

    M(5, r), S(2)

    , I (1, c)

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 46 / 52

  • Studii de caz Distanta ntre siruri

    Determinarea secventei optime: exemplu

    c a m a r a

    0 1 2 3 4 5 6

    a 1 1 1 2 3 4 5

    r 2 2 2 2 3 3 4

    m 3 3 3 2 3 4 4

    a 4 4 3 3 2 3 4

    t 5 5 4 4 3 3 4

    a 6 6 5 5 4 4 3

    M(5, r), S(2), I (1, c)

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 46 / 52

  • Studii de caz Distanta ntre siruri

    AlgoritmuldistSir(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 dinamica 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 dinamica 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 inlocuiritoate operatiile au costul 1

    distanta Hammingsunt admise numai nlocuirilecostul operatiei este 1este finita ori de cate ori |a| = |b|distanta episodica (episode distance)sunt admise numai inseraricostul operatiei este 1distanta este sau |b| |a| sau

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 49 / 52

  • Studii de caz Distanta ntre siruri

    Variatii

    distanta data de cea mai lunga subsecventasunt admise numai inserari si stergeritoate operatiile au costul 1Exemplu: = amxbtycsnma si = bancxstymcxn = amxbtycsnma bamxbtycsnma baxbtycsnma banxbtycsnma bancxbtycsnma bancxtycsnma bancxstycsnma bancxstymcsnma bancxstymcnma bancxstymcxnma bancxstymcxna bancxstymcxn = (a,x,t,y,c,n) este subsecventa comunaeste cea mai lunga?

    D. Lucanu (FII - UAIC) Programare dinamica 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, odistanta d() ntre siruri si un numar k , sa se determine pozitiile j dintextul 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 osecventa de evenimente intr-o perioada scurta de timp)

    cea mai lunga subsecventa comuna: exact ce spune numele

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 51 / 52

  • Studii de caz Distanta ntre siruri

    Variatii

    procesul de cautare pentru matching aproximativ:

    = p, = strebuie sa modificam algoritmul a.. orice pozitie j din text este startulpotential 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 raportatede remarcat ca numai ultimele doua coloane sunt necesare

    D. Lucanu (FII - UAIC) Programare dinamica PA 2014/2015 52 / 52

    Prezentarea generala a paradigmeiStudii de cazProblema rucsacului II (varianta discreta)Distanta ntre siruri