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); } }
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} $