Soluții Laboratorul 6

1. a. binary_search:

După verificările realizate în timp constant, problema este împărțită în două subprobleme de dimensiune înjumătățită, din care doar una este aleasă. (Pentru simplitate, putem considera termenul constant = 1)
$ T(n) = T(n/2) + 1, T(1) = 1 $

Metoda arborilor:
Fiecare nivel conține $ T\left(\frac n{2^h}\right) + 1 $ unde $ h $ este numărul nivelului (începând de la 0), având $ T(1) $ în frunze, deci $ \log n $ niveluri. De asemenea avem o singură frunză. Suma totală este: $$ \left(\sum_{i=0}^{\log n - 1} 1\right) + T(1) = \log n + 1 = \Theta(\log n) $$

Metoda substituției:
Vrem sa demonstrăm că $ T(n) = \Theta(\log n) $, adică
$ \exists(c_1, c_2 > 0)(N \geq 0): \forall(n\geq N): c_1 \log n \leq T(n) \leq c_2 \log n $

Cazul de bază:
$ N = 2 $
$ c_1 \log 2 = c_1 \leq T(2) = 1 + 1 = 2 \leq c_2 \log 2 = c_2 \Rightarrow $
$ c_1 \leq 2 $
$ c_2 \geq 2 $

Pasul inducției:
pp. că $ c_1 \log(n/2) \leq T(n/2) \leq c_2 \log(n/2) $
$ \Rightarrow c_1 \log(n/2) + 1 \leq T(n/2) + 1 \leq c_2 \log(n/2) + 1 $
$ \Rightarrow c_1 \log n - c_1 \log 2 + 1 \leq T(n) \leq c_2 \log n - c_2 \log 2 + 1 $
$ \Rightarrow c_1 \log n + (1 - c_1) \leq T(n) \leq c_2 \log n - (c_2 - 1) $
Dacă $ 1 - c_1 \geq 0 $ și $ c_2 - 1 \geq 0 $ atunci
$ \Rightarrow c_1 \log n \leq T(n) \leq c_2 \log n $
Astfel, avem condițiile:
$ c_1 \leq 1 $
$ c_2 \geq 2 $

b. successor:

Verificările de ieșire din recursivitate, calculul lui high și low, check-ul după max pentru a vedea dacă trebuie să căutăm succesorul lui x în același cluster cu x sau în următorul cluster nevid și calculul final al index-ului se realizează toate în timp constant, mărginit superior de o constantă $ C $. Apelurile recursive se realizeză pe structuri de dimensiune radical din dimeniunea structurii originale (pe unul din clustere sau pe sumarul care reprezintă un vEB pentru indicii clusterelor, deci tot de aceași dimensiune precum clusters).
$ T(u) = T(\sqrt{u}) + C, T(2) \leq C $.

Metoda arborilor:
Considerăm $ u = 2^{2^k} $ și pornim cu rădăcina arborelui $ T\left(2^{2^k}\right) $.
Fiecare nivel $ h $ conține $ T\left(2^{2^{k - h}}\right) + C $ până la ultimul nivel care conține o singură frunză $ T(2) $.
Ultimul nivel este nivelul $ k = \log \log u $. Suma este:
$$ \left(\sum_{i=0}^{\log \log u - 1} C\right) + T(2) = C \log \log u + T(2) - C = \Theta(\log \log u) $$

Metoda substituției:
Vrem să demonstrăm că $ T(u) = \Theta(\log \log u) $, adică
$ \exists(c_1, c_2, d_1, d_2 > 0)(U \geq 0): \forall(u \geq U): c_1 \log\log u - d_1 \leq T(u) \leq c_2 \log \log u + d_2 $

Cazul de bază:
$ U = 2 $
$ c_1 \log\log 2 - d_1 = -d_1 \leq T(2) \leq C \leq c_2 \log\log 2 + d_1 = d_1 $
$ d_1 \geq 0,\ d_2 \geq C $

Pasul inducției:
pp. că $ c_1 \log \log \sqrt{u} - d_1 \leq T\left(\sqrt{u}\right) \leq c_2 \log \log \sqrt{u} + d_2 $
$ \Rightarrow c_1 \log\log\left(u^{1/2}\right) - d_1 = c_1 \log\left(\frac 12\log u\right) - d_1 \leq T\left(\sqrt u\right) \leq c_2 \log\log\left(u^{1/2}\right) + d_2 \leq \log\left(\frac 12\log u\right) + d_2 $
$ \Rightarrow c_1 \log\log u + c_1 \log\left(\frac 12\right) - d_1 = c_1 \log\log u - c_1 - d_1 \leq T\left(\sqrt u\right) \leq c_2 \log\log u + c_2 \log\left(\frac 12\right) + d_2 = c_2\log\log u - c_2 + d_2 $
$ \Rightarrow c_1 \log\log u - c_1 - d_1 + C \leq T\left(\sqrt u\right) + C \leq c_2\log\log u - c_2 + d_2 + C $
$ \Rightarrow \underbrace{(c_1 \log\log u - d_1) + (C - c_1)}_{\rm LHS} \leq T(u) \leq \underbrace{(c_2 \log\log u + d_2) + (C - c_2)}_{\rm RHS} $
Dacă $ C - c_1 \geq 0 $ și $ C - c_2 \leq 0 $ atunci
$ \Rightarrow c_1 \log\log u - d_1 \leq {\rm LHS} \leq T(u) \leq {\rm RHS} \leq c_2 \log\log u + d_2 $

În final avem condițiile:
$ d_1 \geq 0, d_2 \geq C, $
$ c_1 \leq C \leq c_2 $
care sunt satifăcute, de exemplu, pentru $ d_1 = 0, d_2 = c_1 = c_2 = C $.

2.

$ a = 4;\ b = 4;\ f(n) = 1 = n^0,\ c = 0;\ d = \log_b a = \log_4 4 = 1;\ c < d $
Această recurență intră în cazul 1 al teoremei Master, deci $ T(n) = \Theta(n^d) = \Theta(n) $

$ a = 4;\ b = 2;\ f(n) = n^2 = n^2 \log^0 n,\ c = 2,\ k = 0;\ d = \log_b a = \log_2 4 = 2;\ c = d $
Această recurență intră în cazul 2 al teoremei Master, deci $ T(n) = \Theta(n^d \cdot \log^{k+1}n) = \Theta\left(n^2 \log n\right)$

$ a = 27/8;\ b = 3/2;\ f(n) = n^3 \log^2 n + n^2 = \Theta\left(n^3 \log^2 n\right),\ c = 3,\ k = 2;\ d = \log_b a = 3;\ c = d $
Această recurență intră în cazul 2 al teoremei Master, deci $ T(n) = \Theta(n^d \cdot \log^{k+1}n) = \Theta\left(n^3 \log^3 n\right) $

$ a = 8;\ b = 2;\ f(n) = 2n^4,\ c = 4;\ d = \log_b a = \log_2 8 = 3;\ c > d $
Această recurență intră în cazul 3 al teoremei Master, iar $ f(n) = \Theta(n^c) $, deci $ T(n) = \Theta(f(n)) = \Theta\left(n^4\right) $

$ a = 16;\ b = 4;\ f(n) = n^3\sqrt n = \omega(n^3),\ c = 3;\ d = \log_b a = \log_4 16 = 2;\ c > d $
Verificăm condiția de regularitate de la cazul 3 al teoremei Master:
$ a f(n/b) = 16 \left(\frac n 4\right)^3 \sqrt{\frac n 4} = 16\frac{n^3}{64} \frac{\sqrt n}{2} = \frac{1}{16}n^3\sqrt{n} = \frac{1}{16}f(n) $
Deci, $ k = \frac{1}{16} < 1 $ satisface $ a f(n/b) \leq kf(n) $ pentru orice $ n \geq 1 $.
Suntem în condițiile cazului 3 al teoremei Master, deci $ T(n) = \Theta(f(n)) = \Theta(n^3\sqrt n) $