Sunteți pe pagina 1din 3

n şi obţinem T(n) = c1n2 + c2n; Rezultă că T(n) mult n astfel de operaţii elementare, timpul de

11. Analiza algoritmilor recursivi. Relaţii de ∈ O(n2 | n este o putere a lui 2). execuţie pentru procedura MERGE este Θ(n).
recurenţă 15. Metoda master de rezolvare a recurenţelor.
Teorema master.
Când un algoritm conţine o apelare recursivă la
Metoda master furnizează o „reţetă” pentru
el însuşi, timpul său de execuţie poate fi descris
rezolvarea recurenţelor de forma T(n)= aT(n/b)
adesea printr-o recurenţă. O recurenţă este o 17. Tehnica Greedy
+ f(n) unde a 1 şi b>1sunt constante, iar f(n)
ecuaţie sau o inegalitate care descrie întregul este o funcţie asimptotic pozitivă.
timp de execuţie al unei probleme de Algoritmii greedy (greedy = lacom) sunt în
`Teorema 5.1.1. (teorema master) Fie a 1 general simpli şi sunt folosiţi la probleme de
dimensiune n cu ajutorul timpilor de execuţie şi b>1 constante, fie f(n) o funcţie şi fie T(n)
pentru date de intrare de dimensiuni mici. optimizare, cum ar fi: să se găsească cea mai
definită pe întregii nenegativi prin recurenţă bună ordine de executare a unor lucrări pe
Vom nota cu T(n) timpul de execuţie al unei T(n)= aT(n/b) + f(n) unde interpretăm n/b fie
probleme de dimensiune n. Dacă dimensiunea calculator, să se găsească cel mai scurt drum
problemei este suficient de mică, de exemplu ca ⌊ n/b ⌋ fie ca ⌈n/b⌉ . Atunci T(n) poate într-un graf etc. În cele mai multe situaţii de
n c pentru o anumită constantă c, soluţia fi delimitată asimptotic după cum urmează. acest fel avem:
log a−ε  o mulţime de candidaţi (lucrări de executat,
directă ia un timp constant de execuţie, pe 1. Dacă f ( n )=Ο ( n ) b
vârfuri ale grafului etc);
care îl vom nota cu Θ(1). pentru o anumită constantă  >0, atunci  o funcţie care verifică dacă o anumită mulţime
Să presupunem că divizăm problema în a de candidaţi constituie o soluţie posibilă, nu neapărat optimă, a
log ab
subprobleme, fiecare dintre acestea având T ( n ) =Θ ( n ) . problemei;
 o funcţie care verifică dacă o mulţime de
log ab
dimensiunea de 1/b din dimensiunea problemei
2. Dacă f ( n )=Θ ( n ) , candidaţi este fezabilă, adică dacă este posibil să completăm
originale. Dacă D(n) este timpul necesar pentru această mulţime astfel încât să obţinem o soluţie posibilă, nu
log ab
a divide problema în suprobleme, iar C(n) este atunci T ( n ) =Θ ( n lg n ) . neapărat optimă, a problemei;
 o funcţie de selecţie care indică la orice moment
log ab +ε
timpul necesar pentru a combina soluţiile 3. Dacă f ( n )=Ω ( n ) , care este cel mai promiţător dintre candidaţii încă nefolosiţi;
subproblemelor în soluţia problemei originale,  o funcţie obiectiv care dă valoarea unei soluţii
pentru o anumită constantă  >0 şi dacă (timpul necesar executării tuturor lucrărilor într-o anumită
obţinem recurenţa:
Θ (n) , n≤c
af ( n/b )≤cf ( n ) pentru o anumită
ordine, lungimea drumului pe care l-am găsit etc); aceasta este

T (n)=
{
aT
n
b()+ D ( n )+ C ( n ) , n>c
constantă c  1şi toţi n suficient de mari, atunci
T ( n ) =Θ ( f ( n ) ) .
funcţia pe care urmărim să o optimizăm
(minimizăm/maximizăm).
Pentru a rezolva problema de optimizare, se
caută o soluţie posibilă care să optimizeze valoarea
În fiecare dintre cele trei cazuri, comparăm funcţia f(n) cu
12. Recurenţe liniare omogene. Metoda funcţia nlogba. În primul caz, f(n) trebuie nu numai să fie
funcţiei obiectiv. Un algoritm greedy construieşte
ecuaţiilor caracteristice de rezolvare a mai mică decât nlogba, trebuie să fie polinomial mai mică. soluţia pas cu pas. La fiecare pas, se adaugă acestei
Adică f(n) trebuie să fie asimptotic mai mică decât nlogba cu mulţimi cel mai promiţător candidat, conform funcţiei
recurenţelor.
un factor n pentru o anumită constantă  >0. În al treilea de selecţie. Dacă algoritmul greedy funcţionează
Vom considera recurenţe liniare omogene, caz, f(n) trebuie nu numai să fie mai mare decât nlogba, corect, prima soluţie găsită va fi totodată o soluţie
de forma a0tn + a1tn-1 + …+ aktn-k = 0 unde ti sunt trebuie să fie polinomial mai mare şi, în plus, să verifice optimă a problemei. Soluţia optimă nu este în mod
valorile pe care le căutăm, iar coeficienţii ai condiţia de „regularitate” af ( n/b )≤cf ( n )
. necesar unică: se poate că funcţia obiectiv să aibă
sunt constante. Este important de realizat că cele trei cazuri nu acoperă aceeaşi valoare optimă pentru mai multe soluţii
Vom căuta soluţii de forma tn = xn unde x toate posibilităţile pentru f(n). Există un gol între cazurile 1 şi 2 posibile. Funcţia de selecţie este de obicei derivată din
când f(n) este mai mic decât nlog ba dar nu polinomial mai mic. funcţia obiectiv; uneori aceste două funcţii sunt chiar
este o constanta (deocamdată necunoscută). Analog există un gol între cazurile 2 şi 3 când f(n) este mai mare identice
Încercăm aceasta soluţie în (5.2.1) şi obţinem decât nlog ba dar nu polinomial mai mare. Dacă funcţia f(n) cade
a0xn + a1xn-1 + ... + akxn-k = 0. într-unul dintre aceste goluri, sau când condiţia de regularitate
din cazul 3 nu este verificată, metoda master nu poate fi
Soluţiile acestei ecuaţii sunt fie soluţia utilizată pentru a rezolva recurenţa.
triviala x = 0, care nu ne interesează, fie soluţiile Exemplu: Metoda master nu se aplică recurenţei T(n)=
ecuaţiei a0xk + a1xk-1 + ... + ak = 0 care este 2T(n/2) + nlgn, chiar dacă are forma potrivită: a=2, b=2, f(n)=
nlgn şi nlogba = n. Se pare că ar trebui să se aplice cazul 3,
ecuaţia caracteristica a recurenţei (1.4.2). deoarece f(n)= nlgn este asimptotic mai mare decât nlogba = n,
Presupunând deocamdată ca cele k rădăcini r1, dar nu polinomial mai mare. Raportul f(n)/nlogba = (nlgn)/n este
r2, ..., rk ale acestei ecuaţii caracteristice sunt asimptotic mai mic decât n pentru orice constantă pozitivă .
În consecinţă, recurenţa cade în golul dintre cazurile 2 şi 3
distincte, orice combinaţie liniară
k 16. Metoda divide si stapineste
t n=∑ c i r ni Unul din avantajele algoritmilor de tipul
i=1 este o soluţie a recurenţei divide şi stăpîneşte este acela că timpul lor de
(5.2.1), unde constantele c1, c2, ..., ck sunt execuţie este adesea uşor de determinat
determinate de condiţiile iniţiale. folosind tehnici date mai sus. Aceşti algoritmi
folosesc de obicei o abordare de tipul divide şi
13. Recurenţe liniare neomogene stăpîneşte: ei rup problema de rezolvat în mai
Consideram acum recurenţe de multe probleme similare problemei iniţiale, dar
următoarea formă mai generală a0tn + a1tn-1 + ... de dimensiune mai mică, le rezolvă în mod
+ aktn-k = bnp(n) unde b este o constantă, iar recursiv şi apoi le combină pentru a crea o
p(n) este un polinom în n de grad d. Ideea soluţie a problemei iniţiale.
generala este că, prin manipulări convenabile, Paradigma divide şi stăpîneşte implică trei paşi la fiecare
nivel de recursivitate:
să reducem un astfel de caz la o formă  Divide problema într-un număr de subprobleme.
omogenă.  Stăpîneşte subproblemele prin rezolvarea acestora în
mod recursiv. Dacă dimensiunile acestora sunt suficient de mici,
14. Metoda schimbării variabilei. rezolvă subproblemele în mod uzual, nerecursiv.
 Combină soluţiile tuturor subproblemelor în soluţia
Uneori, printr-o schimbare de variabilă,
finală pentru problema iniţială.
putem rezolva recurenţe mult mai complicate. 1.1. Sortarea prin interclasare.
În exemplele care urmează, vom nota cu T(n) Algoritmul de sortare prin interclasare urmează
termenul general al recurenţei şi cu tk termenul îndeaproape paradigma divide şi stăpîneşte. Intuitiv acesta
operează astfel:
noii recurenţe obţinute printr-o schimbare de Divide: Împarte şirul de n elemente care urmează a fi
variabilă. Presupunem pentru început ca n este sortat in două subşiruri de câte n/2 elemente. Stăpîpneşte:
o putere a lui 2. Sortează recursiv cele două subşiruri utilizînd sortarea prin
interclasare. Combină: Interclasează cele două subşiruri sortate
Fie recurenţa T(n) = 4T(n/2) + n, n > 1 în pentru a produce rezultatul final.
care înlocuim pe n cu 2k, notăm tk = T(2k) = T(n) Din punctul de vedere al timpului de
şi obţinem tk = 4tk-1 + 2k. Ecuaţia caracteristică a execuţie, fiecare pas de bază durează un timp
acestei recurenţe liniare este (x-4)(x-2) = 0 cu constant, deoarece comparăm de fiecare dată
rşi deci, tk = c14k + c22k. Înlocuim la loc pe k cu lg doar două cărţi. Deoarece avem de făcut cel
18. Arbori parţiali de cost minim.
Fie G = <V, M> un graf neorientat conex, unde V
este mulţimea vârfurilor şi M este mulţimea muchiilor. Fiecare 20. Arbori binari de interclasare. Algoritmul
muchie are un cost nenegativ (sau o lungime nenegativă).
Problema este să găsim o submulţime A  M, astfel încât toate Huffman.
vârfurile din V să rămână conectate atunci când sunt folosite Codurile Huffman reprezintă o tehnică 21. Cele mai scurte drumuri care pleacă din
doar muchii din A, iar suma lungimilor muchiilor din A să fie cat foarte utilizată şi eficientă pentru compactarea acelaşi punct. Algoritmul Dijkstra.
mai mică. Căutăm deci o submulţime A de cost total minim.
datelor; în funcţie de caracteristicile fişierului Fie G  = <V, M> un graf orientat, unde
Această problemă se mai numeşte şi problema conectării
care trebuie comprimat, spaţiul economisit este V este mulţimea vârfurilor şi M este mulţimea
oraşelor cu cost minim, având numeroase aplicaţii.
între 20% şi 90%. Algoritmul greedy pentru muchiilor. Fiecare muchie are o lungime
Graful parţial <V, A> este un arbore şi este numit nenegativa. Unul din vârfuri este ales că vârf
realizarea acestei codificări utilizează un tabel
arborele parţial de cost minim al grafului G (minimal spanning sursă. Problema este de a determina lungimea
tree). Un graf poate avea mai mulţi arbori parţiali de cost cu frecvenţele de apariţie ale fiecărui caracter.
celui mai scurt drum de la sursă către fiecare
minim. Vom prezenta doi algoritmi greedy care determină Ideea este de a utiliza o modalitate optimă vârf din graf.
arborele parţial de cost minim al unui graf. În terminologia
pentru reprezentarea fiecărui caracter sub Se spune, că un drum de la sursă câtre
metodei greedy, vom spune că o mulţime de muchii este o
soluţie, dacă constituie un arbore parţial al grafului G, şi este forma unui şir binar. un alt vârf este special, dacă toate vârfurile
fezabila, dacă nu conţine cicluri. O mulţime fezabilă de muchii Sa presupunem că avem un fişier ce conţine 100.000 de
este promiţătoare, dacă poate fi completată pentru a forma caractere, pe care dorim să îl memorăm într-o formă intermediare de-a lungul drumului aparţin lui S
soluţia optimă. O muchie atinge o mulţime dată de vârfuri, dacă compactată. Frecvenţele de apariţie ale caracterelor în text (numarul de virfuri).
exact un capăt al muchiei este în mulţime. Mulţimea iniţiala a sunt date de figura 2.2: există doar şase caractere diferite şi Proprietatea 3. În algoritmul lui
candidaţilor este M. Cei doi algoritmi greedy aleg muchiile una fiecare dintre ele apare de 45.000 de ori.
Vom considera problema proiectării unui cod binar al Dijkstra, dacă un vârf i
cate una intr-o anumita ordine, această ordine fiind specifică
fiecărui algoritm. caracterelor (pe scurt cod) astfel încât fiecare caracter este a)     este în S, atunci D[i] dă lungimea celui mai
reprezentat printr-un şi binar unic. Dacă utilizăm un cod de scurt drum de la sursă câtre i;
lungime fixă, avem nevoie de 3 biţi pentru a reprezenta şase b)     nu este în S, atunci D[i] dă lungimea celui
Algoritmul Kruskal. caractere: a=000,b=001, ...,f=101. Această metodă
Arborele parţial de cost minim poate fi necesită 300.000 de biţi pentru a codifica tot fişierul. Se pune
mai scurt drum special de la sursă câtre i. 
construit muchie, cu muchie, după următoarea problema dacă se poate face o compactare şi mai bună. La terminarea algoritmului, toate
metoda a lui Kruskal (1956): se alege întâi muchia de O codificare cu lungime variabilă poate vârfurile grafului, cu excepţia unuia, sunt în S.
cost minim, iar apoi se adaugă repetat muchia de cost îmbunătăţi semnificativ performanţele, Din proprietatea precedenta, rezulta că
minim nealeasă anterior şi care nu formează cu algoritmul lui Dijkstra funcţionează corect.
precedentele un ciclu.
atribuind caracterelor cu frecvenţe mai mari
cuvinte de cod mai scurte iar celor cu frecvenţe . Iniţializarea necesita un timp în O(n).
Proprietatea 1. În algoritmul lui Alegerea lui v din bucla repeat presupune
Kruskal, la fiecare pas, graful parţial <V, A> mai reduse cuvinte de cod mai lungi.
parcurgerea tuturor vârfurilor conţinute în C la
formează o pădure de componente conexe, în Huffman a inventat un algoritm greedy
iteraţia respectivă, deci a n1, n2, ..., 2 vârfuri,
care fiecare componentă conexă este la rândul care construieşte o codificare prefix optimă
ceea ce necesită în total un timp în O(n2). Bucla
ei un arbore parţial de cost minim pentru numită codul Huffman. Algoritmul construieşte
for interioară efectuează n2, n3, ..., 1 iteraţii,
vârfurile pe care le conectează. În final, se arborele corespunzător codificării optime, într-
totalul fiind tot în O(n2). Rezulta că algoritmul
o manieră "bottom-up". Se începe cu o mulţime de | C|
obţine arborele parţial de cost minim al grafului
frunze şi se realizează o secvenţă de | C | -1 operaţii de
Dijkstra necesita un timp în O(n2). Timpul se
G.  interclasare pentru a crea arborele final. poate îmbunătăţi, dacă se vor folosi în locul
O(m log m) pentru a sorta muchiile. Deoarece m  n(n–1)/2, În algoritmul care urmează, vom presupune că C este o matricei de adiacenţă liste de adiacenţă.
rezulta O(m log m)  O(m log n). Mai mult, graful fiind conex, mulţime de n caractere şi fiecare caracter c C este un obiect Este uşor de observat că, într-un graf G
din n1  m rezulta şi O(m log n)  O(m log m), deci având o frecvenţă dată f[c]. Va fi folosită o coadă de priorităţi
O(m log m) = O(m log n). pentru a identifica cele două obiecte cu frecvenţa cea mai
neorientat conex, muchiile celor mai scurte
O(n) pentru a iniţializa cele n mulţimi disjuncte. redusă care vor fuziona. Rezultatul interclasării celor două drumuri de la un vârf i la celelalte vârfuri
Cele cel mult 2m operaţii find3 şi n–1 operaţii merge3 obiecte este un nou obiect a cărui frecvenţă este suma formează un arbore parţial al celor mai scurte
necesita un timp în O((2mn1) lg* n). Deoarece frecvenţelor celor două obiecte care au fost interclasate. drumuri pentru G. Desigur, acest arbore depinde
O(lg* n)  O(log n) şi n1  m, acest timp este şi în O(m log n).
O(m) pentru restul operaţiilor.
de alegerea rădăcinii i şi el diferă, în general, de
Algoritmul Prim arborele parţial de cost minim al lui G.

În acest algoritm, la fiecare pas, mulţimea A de


muchii alese împreună cu mulţimea U a vârfurilor pe care le
conectează formează un arbore parţial de cost minim pentru
subgraful <U, A> al lui G. Iniţial, mulţimea U a vârfurilor acestui
arbore conţine un singur vârf oarecare din V, care va fi
rădăcina, iar mulţimea A a muchiilor este vidă. La fiecare pas, se
alege o muchie de cost minim, care se adaugă la arborele
precedent, dând naştere unui nou arbore parţial de cost minim.
Arborele parţial de cost minim creste “natural”, cu cate o
ramură, până când va atinge toate vârfurile din V, adică până
când U  = V.
Proprietatea 2. În algoritmul lui Prim,
la fiecare pas, <U, A> formează un arbore
parţial de cost minim pentru subgraful <U, A> al
lui G. În final, se obţine arborele parţial de cost
minim al grafului G. 
Algoritmul Prim necesită un timp în
O(n2). Am văzut că timpul pentru algoritmul lui
Kruskal este în O(m log n), unde m = #M.
Pentru un graf dens se deduce că m se apropie
de n(n–1)/2. În acest caz, algoritmul Kruskal
necesită un timp în O(n2 log n) şi algoritmul
Prim este probabil mai bun. Pentru un graf rar
m se apropie de n şi algoritmul Kruskal necesită
un timp în O(n log n), fiind probabil mai eficient
decât algoritmul Prim.
dacă se doreşte doar calculul unei singure
soluţii optime. In vederea realizării pasului 4,
deseori se păstrează informaţie suplimentară
de la execuţia pasului 3, pentru a uşura
construcţia unei soluţii optimale.

22.Programarea dinamică. Principiile


fundamentale ale programării dinamice.
24. Determinarea celor mai scurte drumuri
25. Parantezarea optimală a unui produs de
O problemă rezolvabilă prin metoda între fiecare pereche de vârfuri. Algoritmul lui
matrice.
programării dinamice trebuie adusă mai întâi la Floyd.
Fie G = <V, A> un graf orientat, unde V este mulţimea vârfurilor Un produs de matrice este complet
o formă discretă în timp. De asemenea, foarte şi A este mulţimea arcelor. Fiecărui arc i se asociază o lungime parantezat fie dacă este format dintr-o unică
importantă este ordinea în care acestea se iau. nenegativă. Să se calculeze lungimea celui mai scurt drum între matrice, fie dacă este produsul a două produse
Programarea dinamică este (şi nu luaţi aceste fiecare pereche de varfuri.
Vom presupune că vârfurile sunt numerotate de la 1 la n şi că de matrice care sunt la rândul lor complet
rânduri ca pe o definiţie) în esenţă un proces matricea L dă lungimea fiecărui arc: L[i, i] = 0, L[i, j] 0 pentru i parantezate. Cum înmulţirea matricelor este
decizional în mai multe etape: în starea iniţială a j, L[i, j] = dacă arcul (i, j) nu există. asociativă, toate parantezările conduc la acelaşi
problemei luăm prima decizie, care determină o Principiul optimalităţii este valabil: dacă cel mai produs.
nouă stare a problemei în care luăm o decizie. scurt drum de la i la j trece prin varful k, atunci Să considerăm mai întâi costul înmulţirii a două matrice.
Termenul dinamic se referă chiar la acest lucru: porţiunea de drum de la i la k, cât şi cea de la k Algoritmul standard este dat de următoarea procedură, descrisă
în pseudocod. Prin linii şi coloane sunt referite numărul de linii,
problema este rezolvată în etape dependente de la j, trebuie să fie, de asemenea, optime. respectiv de coloane ale matricei.
timp. Construim o matrice D care să conţină lungimea celui mai scurt Două matrice A şi B se pot înmulţi numai dacă numărul de
drum între fiecare pereche de vârfuri. Algoritmul de programare
- care este etapa iniţială (caz în care avem de a dinamică iniţializează pe D cu L. Apoi, efectuează n iteraţii.
coloane din A este egal cu numărul de linii din B. Astfel, dacă A
este o matrice având dimensiunea p x q şi B este o matrice având
face cu un proces decizional descendent) sau După iteraţia k, D va conţine lungimile celor mai scurte drumuri dimensiunea q x r, matricea produsă C este o matrice având
care este etapa finală (caz în care avem de a face care folosesc ca vârfuri intermediare doar vârfurile din {1, 2, ..., dimensiunea p x r. Timpul necesar calculului matricei C este
k}. După n iteraţii, obţinem rezultatul final. La iteraţia k,
cu un proces decizional ascendent)? algoritmul trebuie să verifice, pentru fiecare pereche de vârfuri
determinat de numărul de înmulţiri scalare (a se vedea linia 8
din algoritm) care este pqr. In cele ce urmează, vom exprima
- care este regula după care trecem dintr-o etapă (i, j), dacă există sau nu un drum, trecând prin varful k, care este timpul de execuţie în funcţie de numărul de înmulţiri scalare.
mai bun decât actualul drum optim ce trece doar prin vârfurile
în alta ? De obicei această regulă este exprimată din {1, 2, ..., kDk matricea D după iteraţia k. Verificarea Problema înmulţirii şirului de matrice
printr-o recurenţă. necesară este atunci: poate fi enunţată în următorul mod: dându-se un
În cele ce urmează prin strategie înţelegem Dk[i, j] = min(Dk-1[i, j], Dk-1[i, k] Dk-1[k, j]) şir (A1, A2, ..., An ) de n matrice, unde pentru i =
unde s-a facut uz de principiul optimalităţii pentru a
un şir de decizii. Conform principiului lui calcula lungimea celui mai scurt drum faţă de k. Implicit, s-a 1,2,..., n, matricea Ai are dimensiunile pi-1 x pi să
Bellman, numit principiul optimalităţii avem: considerat că un drum optim care trece prin k nu poate trece de se parantezeze complet produsul A1A2...An, astfel
O strategie are proprietatea că oricare ar fi două ori prin k. încât să se minimizeze numărul de înmulţiri
starea iniţială şi decizia iniţială, deciziile Se poate deduce că algoritmul lui Floyd scalare.
rămase trebuie să constituie o strategie optimă necesită un timp în O(n3). Un alt mod de a Primul pas din schema generală a metodei programării
privitoare la starea care rezultă din decizia rezolva această problemă este să se aplice dinamice constă în caracterizarea structurii unei soluţii optimale.
Pentru problema înmulţirii şirului de matrice, aceasta este
anterioară. algoritmul Dijkstra prezentat mai sus de n ori, descrisă în continuare. Pentru simplitate, vom adopta convenţia
alegând mereu un alt vârf sursă. Se obtine un de notare Ai..j pentru matricea care rezultă în urma evaluării
Principiile fundamentale: timp în n O (n2), adică tot în O (n3). Algoritmul produsului AiAi+1…Aj. O parantezare optimă a produsului A1A2...An
împarte produsul între Ak şi Ak+1 pentru un anumit întreg k din
lui Floyd, datorită simplităţii lui, are însă intervalul 1 k < n. Aceasta înseamnă că, pentru o valoare a lui
1. Evitarea calcularii de mi multe ori constanta multiplicativă mai mică, fiind probabil k, mai întâi calculăm matricele A1..k şi Ak+1..n şi apoi, le înmulţim
aceeasi subrpobleme prin memorarea mai rapid în practică. pentru a produce rezultatul final A1..n. Costul acestei parantezări
optime este costul calculului matricei A1..k plus costul calculului
rezultatelor intermediare matricei Ak+1..n, plus costul înmulţirii celor două matrice.
2. Opereaza de jos in sus Observaţia cheie este că parantezarea subşirului ''prefix"
A1A2...Ak, în cadrul parantezării optime a produsului A1A2...An,
3. Se utilizeaza pt rezolvarea trebuie să fie o parantezare optimă pentru A1A2...Ak deoarece
problemelor de optimizare care dacă ar fi existat o modalitate mai puţin costisitoare de
parantezare a lui A1A2...Ak, înlocuirea respectivei parantezări în
satisfac pricipiul optimitatii parantezarea lui A1A2...An ar produce o altă parantezare pentru
A1A2...An al cărei cost ar fi mai mic decât costul optimal, ceea ce
este o contradicţie. O observaţie asemănătoare este valabilă şi
pentru parantezarea subşirului Ak+1Ak+2...An în cadrul parantezării
optime a lui A1A2...An: aceasta trebuie să fie o parantezare optimă
23. Paşii dezvoltării unui algoritm de pentru Ak+1Ak+2...An.
programare dinamică. Prin urmare, o soluţie optimă a unei instanţe
În general, metoda programării dinamice a problemei înmulţirii şirului de matrice conţine
se aplică problemelor de optimizare. Asemenea soluţii optime pentru instanţe ale
probleme pot avea mai multe soluţii posibile. subproblemelor. Existenţa substructurilor
Fiecare soluţie are o valoare iar ceea ce se optime în cadrul unei soluţii optime este una
doreşte este determinarea soluţiei a cărei dintre caracteristicile cadrului de aplicare a
valoare este optimă (minimă sau maximă). O metodei programării dinamice.
asemenea soluţie se numeşte o soluţie optimă
a problemei prin contrast cu soluţia optimă,
deoarece pot fi mai multe soluţii care realizează
valoarea optimă.
Dezvoltarea unui algoritm bazat pe
programarea dinamică poate fi împărţită într-o
secvenţă de patru paşi.
1. Caracterizarea structurii unei soluţii
optime.
2. Definirea recursivă a valorii unei soluţii
optime.
3. Calculul valorii unei soluţii optime într-o
manieră de tip "bottom-up".
4. Construirea unei soluţii optime din
informaţia calculată.
Paşii 1-3 sunt baza unei abordări de tip
programare dinamică. Pasul 4 poate fi omis

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