irul lui Fibonacci (Top-down) Combinri (Bottom-up) Aplicaii automatizri: transformarea unor cuvinte printr-un numr minim de pai prin a (adugare liter), m (modificare liter), s (tergere liter) Dijkstra (doar selecia este Greedy) ir cresctor de lungime maxim, nmulire matrice, secvena cea mai lung comun unor iruri de caractere
19.06.2014 Curs 5 Programare dinamic 2 Curs 6 - Programare dinamic se determin un algoritm pentru soluia optim exist o variant recursiv a algoritmului se mparte problema n subprobleme se calculeaz de jos n sus soluiile (Bottom-Up) sau se calculeaz de sus n jos soluiile (Top- down) se memoreaz soluiile calculate anterior !!! Optimul global determin optimul parial 19.06.2014 Curs 5 Programare dinamic 3 Curs 6 - Programare dinamic irul lui Fibonacci (D&I) int fibonacci_rec(int n){ if(n==0) return 0; if(n==1) return 1; return fibonacci_rec(n-2) + fibonacci_rec(n-1); } 5 4 3 3 2 2 1 2 1 1 0 1 0 1 0 2 n-1 -2 reapelri O(2 n ) 19.06.2014 Curs 5 Programare dinamic 4 Curs 6 - Programare dinamic irul lui Fibonacci #define N 20 int memo[N]; //variabil global
int fibonacci_pd1(int n){ if(n==0) return 0; if(n==1) return 1; if (memo[n-2]) return memo[n-2]; memo[n-2]=fibonacci_pd1(n-2)+fibonacci_pd1(n-1); return memo[n-2]; } n+1 reapelri O(n) 19.06.2014 Curs 5 Programare dinamic 5 Curs 6 - Programare dinamic irul lui Fibonacci int fibonacci_pd2(int n){ if(n==0) return 0; if(n==1) return 1; static int memo_local[N];
if (memo_local[n-2]) return memo_local[n-2];
memo_local[n-2]=fibonacci_pd2(n-2)+fibonacci_pd2(n-1); return memo[n-2]; } n+1 reapelri O(n) 19.06.2014 Curs 5 Programare dinamic 6 Curs 6 - Programare dinamic Combinri C n k (D&I)