This is an old revision of the document!
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.
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); } }
// 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); }
Teorema Master
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:
$ 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) $
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} $