Sunteți pe pagina 1din 32

Proiectarea Algoritmilor - Curs 3

Programare Dinamică

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 1 / 32


Outline

Programare Dinamică

Chain Matrix Multiplication

Arbore optimi de căutare (AOC)

Bibliografie

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 2 / 32


Descriere generală

Metodă de rezolvare eficientă a unor probleme de


optimizare.
Solut, iile optime sunt construite asamblând solut, iile
optime ale unor probleme similare, de dimensiuni mai
mici.
Aplicat, ii ı̂n foarte multe domenii:
Corectarea automată a unui text.
Identificarea drumului minim ı̂ntre oricare două noduri
dintr-un graf.
Bioinformatică.
Procesarea limbajului natural.
Recunoas, terea automată a vorbirii, etc.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 3 / 32


Caracteristici

O solut, ie optimă a unei probleme este obt, inută din


solut, iile optime ale subproblemelor.
Decompozabilitatea recursivă a problemei P ı̂n
subprobleme similare P “ Pn , Pn ´ 1, . . . P0 care acceptă
solut, ii din ce ı̂n ce mai simple.
Suprapunerea problemelor
Solut, ia unei probleme Pi participă ı̂n procesul de
construct, ie a solut, iilor mai multor probleme Pk de talie
mai mare, k ą i.
Memoizare - se foloseşte un tablou pentru salvarea
soluţiilor subproblemelor pentru a nu le recalcula.
În general, se foloses, te o abordare bottom-up, de la
subprobleme la probleme.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 4 / 32


Comparat, ie Greedy - Programare dinamică

Greedy Programare dinamică


Sunt ment, inute doar La construct, ia unei
solut, iile part, iale curente solut, ii noi poate contribui
din care evoluează orice altă solut, ie part, ială
solut, iile part, iale generată anterior.
următoare.
Se păstrează toate
Solut, iile part, iale
solut, iile part, iale.
anterioare sunt eliminate.
Se poate obt, ine o solut, ie Se obt, ine solut, ia optimă.
neoptimă. (trebuie
demonstrat că se poate
aplica).

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 5 / 32


Comparat, ie Divide et Impera - Programare
dinamică

Divide et Impera Programare dinamică


În general, abordare
Abordare top-down – bottom-up - se pornes, te
problema este de la sub-soluţii
descompusă ı̂n elementare şi se combină
subprobleme care sunt sub-soluţiile mai simple
rezolvate independent ı̂n sub-soluţii mai
complicate, pe baza
Putem rezolva aceeaşi criteriului de optim
subproblemă de mai
Se evită calculul repetat
multe ori
al aceleiaşi subprobleme
(memoizare)
Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 6 / 32
Chain Matrix Multiplication [Cor09]

Se dă un s, ir de matrice: A1 , A2 , ..., An


Care este numărul minim de ı̂nmult, iri de scalari pentru a
calcula produsul: A1 xA2 x...An ?
Să se determine una dintre parantezările care
minimizează numărul de ı̂nmult, iri de scalari.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 7 / 32


Înmult, irea matricelor

App, qqxBpq, r q ùñ p ˚ q ˚ r ı̂nmult, iri de scalari.


Dar ı̂nmult, irea matricelor este asociativă (des, i nu este
comutativă).
App, qq ˚ Bpq, r q ˚ C pr , sq
pABqC ùñ p ˚ q ˚ r ` p ˚ r ˚ s ı̂nmult, iri.
ApBC q ùñ q ˚ r ˚ s ` p ˚ q ˚ s ı̂nmult, iri.
Exemplu: p = 5, q = 4, r = 6, s = 2
pABqC ùñ 180 ı̂nmult, iri.
ApBC q ùñ 88 ı̂nmult, iri.
Parantezarea este foarte importantă!

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 8 / 32


Solut, ia naivă

Intrare - N matrice: A1 , A2 , ..., An


Vector de dimensiuni: p0 , p1 , ..., pn
Ai ppi´1 , pi q : A1 pp0 , p1 q, A2 pp1 , p2 q, ...

Căutare exhaustivă (construim toate parantezările


posibile): ωp4n {n3{2 q.
Vrem să găsim o solut, ie polinomială folosind P.D.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 9 / 32


Descompunere ı̂n subprobleme

Încercăm să definim subprobleme identice cu problema


originală, dar de dimensiune mai mică.
@i, j, 1 ď i ď j ď n :
Notăm Ai,j “ Ai x...xAj . Ai , j are pi´1 linii s, i pj coloane.
mri, js - numărul optim de ı̂nmulţiri pentru a rezolva
subproblema Ai,j .
sri, js - poziţia primei paranteze pentru subproblema Ai,j .
Care este parantezarea optimă pentru Ai,j ?
Problema init, ială: A1,n

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 10 / 32


Combinarea subproblemelor

Pentru a rezolva Ai,j :


Trebuie găsit acel indice i ď k ă j care asigură
parantezarea optimă:
Ai,j “ pAi x...xAk qxpAk`1 x...xAj q.
Ai,j “ Ai,k xAk`1,j .

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 11 / 32


Alegerea optimă

Căutăm optimul dintre toate variantele posibile de alegere


i ď k ă j.
Pentru aceasta, trebuie ı̂nsă ca şi subproblemele folosite
să aibă soluţie optimală (adică Ai,k şi Ak`1,j să aibă
solut, ie optimă).

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 12 / 32


Substructura optimală

Dacă ştim că alegerea optimală a soluţiei pentru problema


Ai,j implică folosirea subproblemelor (Ai,k şi Ak`1,j ) şi
soluţia pentru Ai,j este optimală, atunci şi soluţiile
subproblemelor Ai,k şi Ak`1,j trebuie să fie optimale!
Demonstraţie: Folosind metoda cut-and-paste (metodă
standard de demonstrare a substructurii optimale pentru
problemele de programare dinamică).
Observat, ie: Nu toate problemele de optim posedă
această proprietate! Ex: drumul maxim dintr-un graf
orientat.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 13 / 32


Definirea recursivă

Folosind descompunerea ı̂n subprobleme, combinarea


subproblemelor, alegerea optimală şi substructura
optimală putem să rezolvăm problema prin programare
dinamică.
Următorul pas este să definim recursiv soluţia unei
subprobleme.
Vrem să găsim o formulă recursivă pentru m[i, j] şi s[i, j].

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 14 / 32


Definirea recursivă

#
0 i ““ j
mri, js “
miniďkăj pmri, ks ` mrk ` 1, js ` pi´1 ˚ pk ˚ pj q i ă j

Cazurile de baza sunt m[i, i].


Cum alegem s[i, j]?

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 15 / 32


Implementare

Implementare Python

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 16 / 32


Complexitate

Spat, ială: θpn2 q


Pentru memorarea solut, iilor subproblemelor.
Temporală: Opn3 q
Ns: Numărul total de subprobleme: Opn2 q
Na: Număr total de alegeri la fiecare pas: Opnq
Complexitatea: Opn3 q - de obicei egală cu Ns x Na

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 17 / 32


Arbore optim de căutare (AOC) [Cor09, Giu]

Definit, ii
Fie K o mult, ime de chei. Un arbore binar cu cheile K este un
graf orientat s, i aciclic A = (V, E) a.ı̂:
@v P V , v cont, ine o singură cheie kpuq P K iar cheile din
noduri sunt distincte.
Există un nod unic r P V a.ı̂. grad intrarepr q “ 0 s, i
@u P V , u ‰ r , grad intrarepuq “ 1.
@u P V , grad ´ ies, ire ď 2.
@u P V , notăm S(u)/D(u) - succesorul stânga / dreapta.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 18 / 32


Arbore optim de căutare (AOC)

Definit, ii
Fie K o mult, ime de chei peste care există o relat, ie de ordine,
ă. Un arbore binar de căutare satisface @u, v , w P V :
v P Spuq ùñ cheiepv q ă cheiepuq.
w P Dpuq ùñ cheiepuq ă cheiepw q.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 19 / 32


Exemple Arbori binari de căutare

Cu aceleas, i chei se pot construi arbori distinct, i.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 20 / 32


Exemplu (I)

Presupunem ca elementele din A1 si A2 au probabilitat, i


de căutare egale:
Numărul mediu de comparat, ii pentru A1 va fi:
(1 + 2 + 2 + 3 + 3 + 3 + 3) / 7 = 2.42
Numărul mediu de comparat, ii pentru A2 va fi:
(1 + 2 + 2 + 3 + 3 + 4 + 5) / 7 = 2.85

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 21 / 32


Exemplu (II)

Presupunem ca elementele au următoarele probabilităt, i:


8: 0.02, 15: 0.001, 19: 0.1, 23: 0.002, 28: 0.25, 32:
0.2, 41: 0.22
Numărul mediu de comparat, ii pentru A1 va fi:
0.02˚1`0.01˚2`0.2˚2`0.2˚3`0.1˚3`0.25˚3`0.22˚3 “
2.75.
Numărul mediu de comparat, ii pentru A2 va fi:
0.25˚1`0.02˚2`0.22˚2`0.2˚3`0.2˚3`0.01˚4`0.1˚5 “
2.47.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 22 / 32


Probleme

Costul căutării depinde de frecvent, a cu care este căutat


fiecare termen.
Ne dorim ca termenii cei mai des căutat, i să fie cât mai
aproape de vârful arborelui pentru a micşora numărul de
apeluri recursive.
Dacă arborele nu este construit prin sosirea aleatorie a
cheilor putem ajunge la o simplă listă cu n elemente.
Ce se ı̂ntâmplă când cheile sunt deja sortate crescător /
descrescător?

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 23 / 32


Arbore optim de căutare (AOC) - Notat, ii

Notat, ii
Fie A un arbore binar de căutare cu chei ı̂ntr-o
mult, ime X.
k1 , k2 , ..., kn - cheile cont, inute ı̂n A.
d0 , d1 , ..., dn - chei fictive - reprezintă cheile din X care nu
se află ı̂n A.
di´1 ă ki ă di .
pi - probabilitatea de a căuta cheia ki .
qj - probabilitatea de a căuta o cheie reprezentată de yj .
řn řn
k“1 pk ` k“0 qk “ 1.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 24 / 32


Arbore optim de căutare (AOC) (continuare)

Definit, ii
A este un arbore
řn de căutare probabilistică,
řn având costul:
costpAq “ k“1 nivelpA, ki q ˚ pk ` k“0 nivelpA, kj q ˚ qk
Un arbore de căutare probabilistică având cost minim
este un arbore optim la căutare (AOC).

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 25 / 32


Algoritm AOC naiv

Generarea permutărilor cheilor.


Construcţia arborilor de căutare corespunzători.
Calcularea costului pentru fiecare arbore.
Alegerea arborelui de cost minim.
Complexitate: (n!) (deoarece sunt n! permutări).

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 26 / 32


Construct, ia AOC - Notat, ii

Ai,j desemnează un AOC cu cheile ki , ki`1 , ..., kj ı̂n noduri


s, i cu cheile fictive di´1 , di , di`1 , ..., dj ı̂n frunze.
Ci,j “ CostpAi,j q.
CostpAi,j q “ nk“1 nivelpA, ki q˚pk ` nk“0 nivelpA, kj q˚qk .
ř ř

Ri,j - indicele α al cheii kα din rădăcina arborelui Ai,j .


wi,j “ jk“i pk ` jk“i´1 qk “ wi,j´1 ` pj ` qj .
ř ř

Observat, ie: CostpAq “ CostpA1,n q, w1,n “ 1.0.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 27 / 32


Construct, ia AOC - Demonstrat, ie

Lemă
Fie 1 ď i ă j ď n a.ı̂.:
Ci,j “ miniďα1 ďj pCi,α1 ´1 ` Cα1 `1,j q ` w pi, jq.
@α1 , i ď α1 ď j : Ai,α1 ´1 , Aα1 ,j sunt AOC.
Fie α alegerea optimă pentru Ci,j . Atunci, este AOC arborele
Ai,j :
Cu rădăcina kα .
SpAi,j q “ Ai,α´1 .
DpAi,j q “ Aα`1,j .

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 28 / 32


Construct, ia AOC - Demonstrat, ie

Ci,j “ Ci,α´1 ` Ci`1,j ` wi,j .


Ci,j - depinde de indicele α al nodului rădăcină.
Din ipoteză (”cut and paste argument”):
Dacă un AOC T cont, ine un subarbore T’, care cont, ine
cheile ki , ..., kj , respectiv di´1 , ..., dj , atunci T’ trebuie să
fie un arbore optim.
Altfel, dacă ar putea exista T 2 , costpT 2 q ă costpT 1 q
l-am putea ı̂nlocui (”cut”) pe T 1 cu T 2 (”paste”).

Ai,α´1 s, i Aα`1,j sunt AOC ùñ


Ci,α´1 s, i Cα`1,j sunt minime ùñ
Ci,j este minim ùñ
Ai,j este AOC.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 29 / 32


AOC - Implementare

Implementare Python

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 30 / 32


AOC - Concluzii

Ns: Numărul total de subprobleme:


Opn ˚ pn ´ L ` 1qq “ Opn2 q
Na: Cât, i candidat, i avem de evaluat pentru determinarea
alegerii optimale ı̂ntr-un anumit pas?
L “ j ´ i “ Opnq.
Complexitate (Ns * Na): Opn3 q.
Optimizare (Knuth): Opn2 q.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 31 / 32


Bibliografie I

Thomas H Cormen, Introduction to algorithms, cap. 15,


MIT press, 2009.
Cristian A. Giumale, Introducere ı̂n analiza algoritmilor,
cap. 4.5.

Proiectarea Algoritmilor - Curs 3 - Programare dinamică 06 Mar 2019 32 / 32

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