Edit this page Backlinks This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== Recurențe ====== 1. Identificați formula de recurență pentru numărul de pași elementari ai următoarelor programe și calculați complexitatea algoritmilor folosind metoda arborilor și metoda substituției. <code C> int binary_search(int *arr, int start, int end, int x) { if (start > end) return -1; int m = (start + end) / 2; if (arr[m] == x) return m; if (x < arr[m]) { return binary_search(arr, start, m, x); } else { return binary_search(arr, m, end, x); } } </code> <code C> // Fie urmatoarea structura de date (van Emde Boas tree) care retine un set de // numere intregi din intervalul [0, u-1], unde u este de forma 2^(2^k) typedef struct vEB { int sqrt_u; // √u pentru intervalul [0, u-1] struct vEB **clusters; // √u sub-intervale de dimensiune √u struct vEB *summary; // retine daca sub-intervalele sunt vide int min; // minimul din interval int max; // maximul din interval } vEB; int low(vEB *V, int x) { return x % V->sqrt_u; } // indicele lui x in cadrul sub-intervalului int high(vEB *V, int x) { return x / V->sqrt_u; } // indicele sub-intervalului din care face parte x int index(vEB *V, int hi, int lo) { return hi * V->sqrt_u + lo; } int successor(vEB *V, int x) { int i = high(V, x); int j = low(V, x); if (j < V->clusters[i]->max) { j = successor(V->clusters[i], j); } else { i = successor(V->summary, i); j = V->clusters[i]->min; } return index(V, i, j); } </code> === Teorema Master === <note> Fie o formulă de recurență de forma \\ $ T(n) = a\ T\left(\frac n b\right) + f(n), \hspace{1em} a \geq 1, b \ge 1 $ \\ și fie $ d = \log_b a $. \\ În funcție de $ f $ avem următoarele cazuri: * $ f(n) = {\rm O}\left(n^c\right),\ c < d \hspace{1em} \Rightarrow \hspace{1em} T(n) = \Theta\left(n^d\right)$ * $ f(n) = \Theta\left(n^d \log^k n\right),\ k \geq 0 \hspace{1em} \Rightarrow \hspace{1em} T(n) = \Theta\left(n^d \log^{k+1} n\right) $ * $ f(n) = \Omega\left(n^c\right),\ c > d\ \text{ și }\ \exists(k < 1)(N \geq 0): \forall (n \geq N): af\left(\frac n b\right) \leq kf(n) \hspace{1em} \Rightarrow \hspace{1em} T(n) = \Theta(f(n)) $ În particular, ultima condiție de la ultima regulă este automat satisfacută dacă $ f(n) = \Theta(n^c) $ </note> 2. Folosiți Teorema Master pentru a rezolva următoarele recurențe: * $ T(n) = 4 T(n/4) + 1 $ * $ T(n) = 4 T(n/2) + n^2 $ * $ T(n) = \frac{8 T(2n/3)}{27} + n^3 \log^2 n + n^2 $ * $ T(n) = 8 T(n/2) + 2n^4 $ * $ T(n) = 16 T(n/4) + n^3 \sqrt{n} $