Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
aa:lab:6 [2025/11/06 22:30] stefan.sterea |
aa:lab:6 [2025/11/11 08:02] (current) stefan.sterea |
||
|---|---|---|---|
| Line 13: | Line 13: | ||
| if (x < arr[m]) { | if (x < arr[m]) { | ||
| - | return binary_search(arr, start, m, x); | + | return binary_search(arr, start, m - 1, x); |
| } else { | } else { | ||
| - | return binary_search(arr, m, end, x); | + | return binary_search(arr, m + 1, end, x); |
| } | } | ||
| } | } | ||
| Line 23: | Line 23: | ||
| // numere intregi din intervalul [0, u-1], unde u este de forma 2^(2^k) | // numere intregi din intervalul [0, u-1], unde u este de forma 2^(2^k) | ||
| typedef struct vEB { | typedef struct vEB { | ||
| - | int sqrt_u; // √u pentru intervalul [0, u-1] | + | int u, sqrt_u; // u si √u pentru intervalul [0, u-1] |
| struct vEB **clusters; // √u sub-intervale de dimensiune √u | struct vEB **clusters; // √u sub-intervale de dimensiune √u | ||
| struct vEB *summary; // retine daca sub-intervalele sunt vide | struct vEB *summary; // retine daca sub-intervalele sunt vide | ||
| - | int min; // minimul din interval | + | int min, max; // minimul si maximul din interval |
| - | int max; // maximul din interval | + | |
| } vEB; | } vEB; | ||
| Line 35: | Line 34: | ||
| int successor(vEB *V, int x) { | int successor(vEB *V, int x) { | ||
| + | if (V->u == 2) | ||
| + | return (x == 0 && V->max == 1) ? 1 : -1; | ||
| int i = high(V, x); | int i = high(V, x); | ||
| int j = low(V, x); | int j = low(V, x); | ||
| Line 50: | Line 51: | ||
| <note> | <note> | ||
| Fie o formulă de recurență de forma \\ | 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 $ \\ | + | $ T(n) = a\ T\left(\frac n b\right) + f(n), \hspace{1em} a \geq 1, b > 1 $ \\ |
| și fie $ d = \log_b a $. \\ | și fie $ d = \log_b a $. \\ | ||
| În funcție de $ f $ avem următoarele cazuri: | Î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) = {\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) = \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)) $ | + | * $ 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) $ | În particular, ultima condiție de la ultima regulă este automat satisfacută dacă $ f(n) = \Theta(n^c) $ | ||
| </note> | </note> | ||
| Line 62: | Line 63: | ||
| * $ T(n) = 4 T(n/4) + 1 $ | * $ T(n) = 4 T(n/4) + 1 $ | ||
| * $ T(n) = 4 T(n/2) + n^2 $ | * $ 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) = \frac{27 T(2n/3)}{8} + n^3 \log^2 n + n^2 $ |
| * $ T(n) = 8 T(n/2) + 2n^4 $ | * $ T(n) = 8 T(n/2) + 2n^4 $ | ||
| * $ T(n) = 16 T(n/4) + n^3 \sqrt{n} $ | * $ T(n) = 16 T(n/4) + n^3 \sqrt{n} $ | ||