Sunteți pe pagina 1din 5

Metoda mixt

( prezentare general )
Principiul optimalitii
Optimul general implic optimul (optimele) local(e)/pariale
ntr-o secven optim de decizii, fiecare decizie este optim
Nu se verific pentru orice problem

Formal
O secven de decizii dec1 , dec2 , ..., decn transform optim starea s0 n starea sn dac
cel pun una dn condiiile urmtoare este ndeplnit:
deck , deck+1, ..., decn este o secven de decizii care transform optim starea sk-1
n starea sn , pentru orice k, 1 k n
Metoda nante (decizia deck depnde de decizia deck+1, deck+2,
...,decn )
dec1 , dec2 , ..., deck este o secven de decizii care transform optim starea s0 n
starea sk , pentru orice k, 1 k n
Metoda napoi (decizia deck depnde de decizia deck+1, deck+2,
...,decn )
deck+1, ..., decn i dec1 , dec2 ,...,deck sunt 2 secvene de decizii care transform
optim starea sk-1 n starea sn , respectiv starea s0 n starea sk pentru orice k, 1 k
n
Metoda mixt

Algoritm
Verificarea principiului optimalitii
nante
napoi
Mixt
Stabilirea structurii soluiei optime
Descompunerea problemei n sub-probleme
Stabilirea relaiilor de recuren pentru obnerea optimului global dn optimele
pariale
Soluia optim se determn ntr-o manier bottom-up, plecnd de la cazurile
mnimale (sub-problemele nterne) pentru care se cunoate soluia

Probleme
nmulirea optim a unui ir de matrice
Fie A(m,n) i B(n,p) doua matrice bidimensionale de dimensiuni m*n,
respectiv n*p. nmultirea lor are ca rezultat o a treia matrice de
dimensiuni m*p: C(m,p), unde fiecare element cij se poate obtne cu ajutorul
formulei:

Utliznd formul de mai sus, nmultirea dintre A i B va necesit un numar


de m*n*p nmuliri ntre elemente ale celor doua matrice.
Sa presupunem ca dispunem de un ir de matrice A1, A2, ,An, fiecare
matrice Ai are dimensiunile (li, li+1), astfel ca numrul de coloane al fiecarei
matrice sa fie egal cu numrul de lnii ale matricei urmatoare. Astfel, produsul
irului de matrice este defnit: C= A1*A2* *An.
Dac am dispune de un operator suprancarcat pentru nmultirea matricelor,
acesta va efectua nmulirile de la stanga la dreapta, astfel:
C=((((A1*A2)*A3)**An),
ceea ce, dupa cum vom observa mai jos, poate sa nu fie optim dn punctul de
vedere al numrului de operaii efectuate, ntrucat ordnea de grupare (asociere)
a matricelor poate nfluenta semnificativ numrul total de nmuliri efectuate.
Pentru ca nmultirea matricelor este asociativa, matricea-rezultat va fi aceeai,
ndiferent de ordnea de nmultire aleasa. Problema care se pune n scopul
nmulirii optime de matrice este stabilirea ordnii de nmultire, fara a ncerca
toate poibilitatile.
Sa conideram un exemplu extrem de implu: presupunem ca avem 4 matrice de
dimensiuni (100,1), (1,100), (100,1), (1,100). Aadar, n=4i l=(100,1,100,1,100).
Iata trei modalitati de asociere:
(((A1*A2)*A3)*A4), asocierea implicita de la stanga la dreapta. Ea
presupune efectuarea urmatoarelor nmuliri:

(A1*A2), care necesit 100*1*100=10000 nmuliri i


rezult o matrice C1 de dimensiuni (100,100)


C1*A3, matricea C1 de dimensiuni (100,100) obtnuta
la pasul anterior este nmultita cu A3, rezultnd matricea C2 de dimensiuni (100,
1). Au fost efectuate 100*100*1=10000 de nmuliri.

C2*A4, find ultima nmultire de matrice necesit


100*1*100=10000 de operaii.
n total, asocierea stanga-dreapta necesit, n exemplul considerat, 30.000
de nmuliri.

Fig. V-6. Numrul de nmuliri efectuate prin asocierea stanga-dreapta


((A1*A2)*(A3*A4)), necesit, n urma unui rationament imilar celui
de mai sus, 100*1*100 + 100*1*100 + 100*100*100 = 10000 + 10000 + 1000000 =
1.020.000 de operaii

Fig. V-7. Numrul de nmuliri efectuate prin asocierea matricelor extreme


((A1*(A2*A3))*A4), necesit 1*100*1 + 100*1*1 + 100*1*100 = 100 +
100 + 10000 = 10.200 de operaii

Fig. V-8. Numar de nmuliri


Se observa aadar ca dintre cele trei modalitati ultima asociere presupune cel
mai mic numar de nmuliri.

Pentru rezolvarea problemei vom utiliza metoda programarii dnamice


ntroducand o matrice de costuri, unde fiecare element cost[i,j]
cu 1ijn repreznta numrul mnim de operaii necesare pentru a efectua
produsul Ai*Ai+1* *Aj.
Dac Ai*Ai+1* *Aj este un produs optim, atunci exist un ik<j astfel
ca secventele Ai*Ai+1* *Ak i Ak+1*Ak+2* *Aj sa fie optimale. n urma nmulirii
secventei Ai*Ai+1* *Ak , respectiv Ak+1*Ak+2* *Aj se obtn doua matrice de
dimensiuni (li, lk+1), respectiv (lk+1, lj+1), care nmultite ntre ele necesit li*
lk+1*lj+1 operaii. Dintre toate valorile poibile ale lui k ntre i i j se alege aceea
care mnimizeaza totalul comparatiilor. Aadar, n mod natural, deducem
urmtoarea formul, care ne arata ca se verifica principiul optimalitatii:
cost[i,j]=mni<=k<j, cand j>i.
Conditia iniial este evidenta: cost[i,i]=0, pentru orice i=1..n.
Am obtnut astfel o defnitie recuriva a elementelor matricei cost. Este evident
ca numrul mnim de nmuliri pentru a obtne produsul de matrice A1,
A2, ,An este dat de valoarea elementului cost[1,n].
Mai mult, dac la fiecare evaluare a elementului cost[i,j], pentru j>i, retnem
valoarea lui k pentru care a fost realizat mnimul, atunci vom putea deduce
asocierea matricelor. Pentru ca numai jumatate dn matricea de costuri este
utilizata, vom ncarca valoarea k care mnimizeaza numrul de operaii necesar
nmulirii Ai*Ai+1* *Aj n elementul cost[j,i].
Pentru exemplul considerat anterior, unde n=4 i l=(100,1,100,1,100), matricea
de costuri este:
Tabel V-7. Matricea de costuri
0

10.00
0

200

10.20
0

100

200

10.00
0

unde elementele cost[i,j], cu ij, au fost calculate n ordnea crescatoare a


diferentei j-i:

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