Documente Academic
Documente Profesional
Documente Cultură
Alexandru Neagu
5 noiembrie 2022
1 Introducere
Programarea dinamică este o paradigmă de programare care este caracteristică,
de obicei, următoarelor tipuri de probleme:
1
• Substructura optimă
– 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
2
2 Definirea Subproblemei
Pentru a aplica tehnica programării dinamice, trebuie să definim o
subproblemă = o instant, ă a problemei sugestivă parametrizată. De exemplu,
putem presupune că ı̂ntr-o problemă unde avem doua numere ı̂ntregi ca input
- a s, i b, să considerăm că programarea dinamică va fi bazată pe:
• Subprobleme cu numărul a diferit, iar b constant
3
5 Reconstituirea drumului
În unele probleme, nu se cere doar un număr simbolizând un maxim ori un
minim, ci s, i solut, ia aferentă. Cu alte cuvinte, dacă ne ı̂ntreabă sunt obiectele ce
trebuie alese pentru a obt, ine maximul, trebuie să implementăm o reconstituire
a drumului pentru a vedea cum am ajung la rezultatul maxim din programarea
dinamică. Pentru acest lucru, se construies, te o structură similară, peste care
vom aplica o altă dinamică: â
• În celula i sau (i, j) (depinde ce structură folosim) vom ret, ine celula din
care am ajuns aici. De exemplu, am pus rezultatul ı̂n celula (i, j) bazându-
ne pe celula (i-1, j) ı̂n dinamica principală, deci ı̂n dinamica secundara vom
memora perechea (i-1, j) ı̂n celula (i, j)
7 Alte Probleme
Ca temă, analizat, i s, i ı̂ncercat, i să rezolvat, i măcar 4 probleme
1. Cladire
2. Numar Submultimi
3. Alpin
4. Lacusta
5. Antivirus
4
References
[1] Vlad Teodorescu - Programare dinamică
https://profs.info.uaic.ro/~infogim/2021/lectii/1112/02%
20dinamica.pdf
[2] Alexandru Lungu - Tehnici de Programare