Sunteți pe pagina 1din 2

Programare dinamica

Introducere:
● Programarea dinamica este o paradigma de programare ce se aplica de obicei in
cazul problemelor in care se cere determinarea unui optim in urma unor decizii luate
pe parcurs.
● Nu avem un criteriu pe baza caruia sa ne dam seama ca o problema se rezolva cu
sigurata cu programare dinamica, dar exista 2 proprietati care pot sugera aplicarea
acestei metode:
○ Substructura optimala:
■ Problema poate fi descompusa in subprobleme, iar solutia optima a
problemei depinde de solutiile optime ale subproblemelor
■ Aceasta proprietate nu indica neaparat o solutie prin programare
dinamica, deoarece solutii ce utilizeaza metoda Greedy sau Divide et
Impera pot respecta proprietatea
○ Subprobleme care se suprapun:
■ Deoarece subproblemele se suprapun, o rezolvare prin Divide et
Impera ar fi extrem de costisitoare ca si timp de executie, datorita
rezolvarii aceleasi subprobleme de mai multe ori. Prin urmare, prin
programare dinamica, vom rezolva problemele o singura data si vom
retine rezultatele pentru a fi folosite in viitor
● Pasii de rezolvare a unei probleme de programare dinamica sunt de obicei urmatorii:
○ Identificam subproblemele problemei date
○ Alegem o structura de date in care vom retine solutiile subproblemelor
○ Gasim o relatie de recurenta prin care putem calcula solutia problemei
folosind solutiile subproblemelor
○ Rezolvam relatia de recurenta in mod bottom-up (de la cea mai mica
subproblema la cea mai mare)

Probleme clasice:
● Fibonacci
● Problema rucsacului
● Cel mai lung subsir comun
● Parantezare optima de matrici

Probleme propuse (ordonate aproximativ crescator dupa dificultate):


● comori
● cladire
● numar submultimi
● AN
● alpin
● lacusta
● buns
● joc4
● antivirus
● shovels shop
● treasure hunt
● catching cheaters
● divide the string
● bob
● segments
● assimilation
● zero remainder sum
● red black number
● rubik coloring

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