This shows you the differences between two versions of the page.
sda-aa:laboratoare:12 [2021/05/24 06:59] cristian.rusu [4. Exerciții laborator] |
sda-aa:laboratoare:12 [2021/05/26 11:58] (current) cristian.rusu [4. Exerciții laborator] |
||
---|---|---|---|
Line 53: | Line 53: | ||
=== 3.1 Definiție === | === 3.1 Definiție === | ||
+ | |||
+ | Programarea dinamică presupune rezolvarea unei probleme prin descompunea ei în subprobleme și rezolvarea acestora. Spre deosebire de divide et impera, subprogramele nu sunt disjuncte, ci se suprapun. | ||
+ | |||
+ | Pentru a evita recalcularea porțiunilor care se suprapun, rezolvarea se face pornind de la cele mai mici subprograme și folosindu-ne de rezultatul acestora calculăm subproblema imediat mai mare. Cele mai mici subprobleme sunt numite subprobleme unitare, acestea putând fi rezolvate într-o complexitate constantă, ex:cea mai mare secvență dintr-o mulțime de un singur element. | ||
=== 3.2 Algoritm === | === 3.2 Algoritm === | ||
+ | <note important>Pași ce trebuie urmați: | ||
+ | * Identificarea structurii și a matricilor utilizate în caracterizarea soluției optime | ||
+ | * Determinarea unei metode de calcul recursiv pentru a afla valoarea fiecărei subprobleme | ||
+ | * Calcularea „bottom-up“ a acestei valori (de la subprogramele cele mai mici la cele mai mari) | ||
+ | * Reconstrucția soluției optime pornind de la rezultatele obținute anterior | ||
+ | </note> | ||
==== 4. Exerciții laborator ==== | ==== 4. Exerciții laborator ==== | ||
Line 61: | Line 71: | ||
- Aproximaţi, printr-o abordare de tip Divide et Impera, cu o eroare (relativă) de maxim 1e-6, funcţia sqrt(n) (extragerea rădăcinii pătrate a unui număr). Nu aveţi voie să folosiţi nicio funcţie din „math.h“. Încercaţi să extindeţi exerciţiul pentru extragerea radicalului de ordin 3. | - Aproximaţi, printr-o abordare de tip Divide et Impera, cu o eroare (relativă) de maxim 1e-6, funcţia sqrt(n) (extragerea rădăcinii pătrate a unui număr). Nu aveţi voie să folosiţi nicio funcţie din „math.h“. Încercaţi să extindeţi exerciţiul pentru extragerea radicalului de ordin 3. | ||
- Aproximaţi, printr-o abordare de tip Divide et Impera, cu o eroare (relativă) de maxim 1e-3, funcţia lg(n) (extragerea logaritmului în baza 10). Aveţi voie să vă folosiţi de funcţia pow(bază, exp) din „math.h“. | - Aproximaţi, printr-o abordare de tip Divide et Impera, cu o eroare (relativă) de maxim 1e-3, funcţia lg(n) (extragerea logaritmului în baza 10). Aveţi voie să vă folosiţi de funcţia pow(bază, exp) din „math.h“. | ||
+ | - Construiți o funcție care calculează f(n), unde f = șirul lui Fibonacci (cu și fără memoizare). Comparați timpii de rulare. n este numar intreg (pozitiv si negativ). | ||
+ | - Aveți la dispoziție monedele 25, 10, 5 și 1 RON. Calculați cu PD toate posibilitățile de rest (cu și fără memoizare). |