Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
P. 1
Lucrare de Diploma

Lucrare de Diploma

Ratings: (0)|Views: 1,335 |Likes:
Published by olteanuramo

More info:

Published by: olteanuramo on May 22, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

07/02/2013

pdf

text

original

 
Introducere
Programarea dinamieste o metode elaborare aalgoritmilor care se aplică în general problemelor pentru care secere determinarea unui optim în urma adoptării unor decizii.Nu există un criteriu pe baza căruia să identificăm cusiguraă o problema pentru rezolvarea reia trebuie utilizăm metoda programării dinamice, dar putem formula douaproprietăţi care sugerează o soluţie prin programare dinamica.În această lucrare încerc să prezint câteva din metodelegenerale de elaborare a algoritmilor.Primul capitol al acestei lucrări este redată o prezentaregenerală despre structura optimală şi subproblemeesuperpozabile cât şi despre alte operaţii optimale.În al doilea capitol sunt prezentaţi algoritmi deprogramare dinamică şi trei principii fundamentale aleprogramării dinamice.Capitolul trei prezinteva metode de sortare,algoritmii divide et impera şi tehnica divide et impera.
 
Programarea dinamică şi căteva probleme de alocareunidimensională, sunt prezentate
î 
n ultimul capitol al acesteilucrări.
1
 
Capitolul I
PREZENTARE GENERALĂ1.1. Substructura optimală
Problema data poate fi descompusa în subprobleme si soluţia optima a problemei depinde de soluţiile optime ale subproblemelor sale.Acest criteriu nu indica neapărat o soluţie prin programare dinamica, ar  putea fi si un indiciu ca se poate aplica metoda
Greedy
sau metoda "
 Divide et  Impera
".
1.2. Subprobleme superpozabile
Subproblemele problemei date nu sunt independente, ci se suprapun.Datorifaptului subproblemele problemei date se suprapun,deducem că o abordare prin metoda "
 Divide et Impera
" ar fi dezastruoasă din punctul de vedere al timpului de execuţie (datorită faptului ca problemele sesuprapun se ajunge la rezolvarea repetată a aceleiaşi subprobleme). Prin urmare,vom rezolva subproblemele o singura, dată, reţinând rezultatele într-o structurăde date suplimentară (de obicei un tablou).Rezolvarea unei probleme prin programare dinamica presupuneurmătorii paşi:- Se identifica subproblemele problemei date.- Se alege o structura de date suplimenta, capabireţisoluţiilesubproblemelor.- Se caracterizeasubstructuoptimaa problemei printr-o relaţie derecurentă.Pentru a determina soluţia optimă, se rezolva relaţia de recurenţă în mod
bottom-up
(se rezolva subproblemele în ordinea crescătoare a dimensiunii lor).În cele ce urmează vom exemplifica pas cu pas modul de rezolvare a problemelor prin metoda programarii dinamice.
1.3. Înmulţirea optimală a matricelor
Fie n matrice A
1
, A
2
, ..., A
n
, de dimensiuni d
0
xd
1
, d
1
xd
2
, ..., d
n-1
xd
n
.Produsul A
1
xA
2
x...xA
n
se poate calcula în diverse moduri, aplicândasociativitatea operaţiei de înmulţire a matricelor. Numim înmulţire elementarăînmulţirea a doua elemente. În funcţie de modul de parantezare diferă numărul
2
 
de înmuiri elementare necesare pentru calculul produsului A
1
xA
2
x...xA
n
.Determinaţi o parantezare optimală a produsului A
1
xA
2
x...xA
n
(costul parantezării, adică numărul total de înmulţiri elementare sa fie minim).
 Exemplu:
Pentru n=3 matrice cu dimensiunile (10,1000), (1000,10) si (10,100), produsul A
1
xA
2
xA3 se poate calcula în doua moduri:(A
1
xA
2
)xA
3
necesitând 1000000+10000=1010000 înmulţiri elementareA
1
x(A
2
xA
3
), necesitând 1000000+1000000=2000000 înmulţiri.Reamintim ca numărul de înmuiri elementare necesare pentru aînmulţi o matrice A cu n linii si m coloane si B o matrice cu m linii si p coloaneeste n*m*p
Soluţie:
Pentru a calcula A
1
xA
2
x...xA
n
, în final trebuie sa înmulţim două matrice,deci vom paranteza produsul astfel: (A
1
xA
2
x...xA
)x(A
k+1
x...xA
n
). Aceastăobservaţie se aplică si produselor dintre paranteze. Prin urmare, subproblemele problemei iniţiale constau în determinarea parantezării optimale a produselor dematrice de forma A
i
xA
i+1
x...xA
 j
, 1<=i<=j. Observăm că subproblemele nu suntindependente. De exemplu, calcularea produsului A
i
xA
i+1
x...xA
 j
şi calcularea produsului A
i+1
xA
i+2
x...xA
 j+1
, au ca subproblema comuna calcularea produsuluiA
i+1
x...xA
 j
.Pentru a retine soluţiile subproblemelor, vom utiliza o matrice M, cu nlinii şi n coloane, cu semnificaţia:M[i][j] = numărul minim de înmulţiri elementare necesare pentru acalcula produsul A
i
xA
i+1
x...xA
 j
, 1<=i<=j<=n.Evident, nurul minim de înmuiri necesare pentru a calculaA
1
xA
2
x...xA
n
este M[1][n].Pentru ca parantezarea fie optima, parantezarea produselor A
1
xA
2
x...xA
şi A
k+1
x...xA
n
trebuie să fie de asemenea optimală. Prin urmareelementele matricei M trebuie sa satisfacă următoarea relaţie de recurenta:M[i][i]=0, i={1,2,...,n}.M[i][j]=min{M[i][k] + M[k+1][j] + d[i-1]*d[k]*d[j]}i<=k<jCum interpretam aceasta relaţie de recurenta? Pentru a determinanurul minim de înmulţiri elementare pentru calculul produsuluiA
i
xA
i+1
x...xA
 j
, fixăm poziţia de parantezare k în toate modurile posibile (între isi j-1), şi alegem variantă care ne conduce la minim. Pentru o poziţie k fixată,costul parantezării este egal cu numărul de înmulţiri elementare necesare pentrucalculul produsului A
i
xA
i+1
x...xA
, la care se adaugă numărul de înmulţirielementare necesare pentru calculul produsului A
k+1
x...xA
 j
si costul înmulţiriicelor doua matrice rezultate (d
i-1
*d
*d
 j
).Observăm că numai jumătatea de deasupra diagonalei principale din Meste utilizată. Pentru a construi soluţia optimă este utilă şi reţinerea indicelui k,
3

Activity (37)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
Madalina Stroe liked this
Onofrei Cornel liked this
Simona Moldovanu liked this
Mihnea Eduard liked this
Mihnea Eduard liked this
miroiu_m liked this
Valeriu Vrabii liked this
Andrian liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->