==== TEMA 1 ====
''Responsabili tema'': Peticila Alexandru, Peticila Constantin
* I. (//0.4 x 5 = 2p//) Pentru fiecare din urmatoarele recurente aplicati teorema Master (sau argumentati de ce nu poate fi aplicata, daca este cazul):
* $math[T(n) = 4T(\frac{n}{2}) + n^{2.5}]
* $math[T(n) = 4T(\frac{n}{2}) + n^2 log(n)]
* $math[T(n) = T(\sqrt{n}) + \Theta(log( log( n)))]
* $math[T(n) = T(\frac{n}{2}) + n(2 − cos n)]
* $math[T(n) = 3T(\frac{n}{3}) + \frac{n}{log (n)}]
* II. (//0.75 x 2 = 1.5p//) Determinati $math[f(n)] cat mai restrictiv astfel incat :
* $math[T(n) = \Theta(f(n))], unde a ≥ 1, c > 0 si $math[T(n) = T(n − a) + T(a) + cn ]
* $math[T(n) = O(f(n))], unde $math[T(n) = T(n − 1) + T(\frac{n}{2}) + n]
* III. (//1.5p//) Rezolvati urmatoarea recurenta:
* $math[T(a^n) = aT(a^{(n-1)} ) + 2ca^n] \\ unde a, c constante cu a > 1 si T(1) = 0
* IV. (//1.5p//) Pentru inmultirea matricelor Matei foloseste in acest moment un algoritm cu recurenta urmatoare: $math[T(n) = 7T(n/2) + n^2].\\ El nu este multumit de complexitatea acestui algoritm si doreste sa realizeze un algoritm asimptotic mai rapid prin impartirea matricelor in bucati de dimensiune n/4*n/4.\\ Care este numarul maxim de subprobleme pe care algoritmul sau poate sa il creeze astfel incat sa fie asimptotic mai rapid decat algoritmul cel vechi?\\ ''Nota'': Pasii de divide si combina au impreuna complexitatea de Θ($math[n^2] ).
* V.(//2 x 0.75 = 1.5p//) Spunem ca f(n) = $math[{Ω}^{ꝏ}(g(n))] daca ∃ un c ∈ $math[{R}^{+}] astfel incat f(n) ≥ c*g(n) ≥ 0 pentru o infinitate de numere n.
- Verificati daca Ω = $math[{Ω}^{ꝏ}] si $math[{Ω}^{ꝏ}] = Ω
- Stabiliti relatia de adevar a urmatoarei propozitii:\\ Fie f(n) si g(n) doua functii asimptotic positive. Atunci: fie f(n) = O(g(n)), fie f(n) = $math[{Ω}^{ꝏ}](g(n)) sau ambele.\\ Raspunsul este acelasi si daca inlocuim $math[{Ω}^{ꝏ}] cu Ω? Argumentati!
* VI. (//2p//) Analizati complexitatea urmatorului algoritm:
private static Integer recursiveMethod(Integer length) {
if (length > 0) {
Integer index = random(length - 1);
return recursiveMethod(index) + recursiveMethod(length - 1 - index);
} else {
return 1;
}
}
''Nota'': Metoda random(n) foloseste o unitate de timp si returneaza o valoare uniform distribuita in intervalul [0,n], iar timpul pentru celelalte instructiuni e neglijabil.\\
=== PRECIZARI: ===
* Tema va fi redactata individual.
* Tema va fi predata la cursul din data de **6.12.2019** .
* Tema valoreaza **1** punct din nota finala.