====== Notații asimptotice ======
$ \Theta(f(n)) = \{ g: \mathbb{R}^{+} \rightarrow \mathbb{R}^{+}\ |\
\begin{array}{l}
\exists c_1, c_2 \in \mathbb{R}^+\cr
\exists n_0 \in \mathbb{N}
\end{array}\
such\ that\ \forall\ n \ge n_0,\ \ c_1f(n) \le g(n) \le c_2f(n) \}$
{{:aa:lab:theta_fn.png|}}
$ O(f(n)) = \{ g: \mathbb{R}^{+} \rightarrow \mathbb{R}^{+}\ |\
\begin{array}{l}
\exists c \in \mathbb{R}^+\cr
\exists n_0 \in \mathbb{N}
\end{array}\
such\ that\ \forall\ n \ge n_0,\ \
0 \le g(n) \le cf(n) \}$
{{:aa:lab:o_fn.png|}}
$ \Omega(f(n)) = \{ g: \mathbb{R}^{+} \rightarrow \mathbb{R}^{+}\ |\
\begin{array}{l}
\exists c \in \mathbb{R}^+\cr
\exists n_0 \in \mathbb{N}
\end{array}\
such\ that\ \forall\ n \ge n_0,\ \
0 \le cf(n) \le g(n) \}$
{{:aa:lab:omega_fn.png|}}
$ o(f(n)) = \{ g: \mathbb{R}^{+} \rightarrow \mathbb{R}^{+}\ |\
\begin{array}{l}
\forall c \in \mathbb{R}^+\cr
\exists n_0 \in \mathbb{N}
\end{array}\
such\ that\ \forall\ n \ge n_0,\ \
0 \le g(n) \le cf(n) \}$
$ \omega(f(n)) = \{ g: \mathbb{R}^{+} \rightarrow \mathbb{R}^{+}\ |\
\begin{array}{l}
\forall c \in \mathbb{R}^+\cr
\exists n_0 \in \mathbb{N}
\end{array}\
such\ that\ \forall\ n \ge n_0,\ \
0 \le cf(n) \le g(n) \}$
===== Syntactic sugars ======
Notațiile asimptotice sunt adesea folosite pentru a ne referi la funcții arbitrare cu o anumită creștere. Pentru simplitate, putem scrie //expresii aritmetice// astfel:
$ f(n) = \Theta(n) + O(\log(n)) $
Care trebuie citită: $math[\exists g \in \Theta(n)] și $math[\exists h \in O(\log(n))] a.î. $math[f(n) = g(n) + h(n),\ \forall n \in \mathbb{R}^{+}].
Putem de asemenea scrie //ecuații//:
$ \Theta(n^2) = O(n^2) + o(n)$
Care ar trebui citite: $math[\forall f \in \Theta(n^2),\ \exists g \in O(n^2)] și $math[\exists h \in o(n)] a.î. $math[f(n) = g(n) + h(n),\ \forall n \in \mathbb{R}^{+}].
Observați că ecuațiile nu sunt simetrice și ar trebui citite de la stânga la dreapta. De exemplu:
$\Theta(n) = O(n)$
Deși e adevărat că, pentru orice funcție $math[\Theta(n)] există o funcție egală în $math[O(n)], putem vedea că există funcții în $math[O(n)] pentru care nu există niciun corespondent în $math[\Theta(n)].
Ca regulă, fiecare notație asimptotică din stânga unui egal, ar trebui citită ca o funcție **cuantificată universal** ($math[\forall f]) din acea clasă, iar fiecare notație asimptotică din dreapta unui egal ar trebui citită ca o funcție **cuantificată existențial** ($math[\exists g]) din clasa respectivă.
$\left(\frac{\omega(n^2)}{\Theta(n)}\right) = \Omega(n) + o(n)$
$math[\forall f \in \omega(n^2)\ and\
\forall g \in \Theta(n),\ \exists h \in \Omega(n)] și $math[\exists j \in o(n)] a.î.
$math[\left(\frac{f(n)}{g(n)}\right) =
h
(n) + j(n),\ \forall n \in \mathbb{R}^{+}]
===== Exerciții =====
În continuare, aveti un {{:aa:lab:cheetsheet-lab05.pdf|}} pentru a va ajuta la rezolvări.
1. Dați exemple de câte o funcție din următoarele clase de complexitate:
* $ O(n)$
* $ \Omega(log(n))$
* $ \Theta(n^2)$
* $ \omega(\frac{1}{n})$
* $ o(3^n)$
2. Pentru fiecare din perechile de mai jos, dați un exemplu concret de constante pentru care inegalitățile implicate în definiția clasei de complexitate sunt adevărate:
* $ log(n) \in o(\sqrt n)$
* $ 100n^2 \in O(2^n)$
* $ 0.001n^3 \in \Omega(20 \sqrt n)$
* $ 10n \in \Theta(n)$
* $ n \in \Theta(10n)$
3. Găsiți două funcții $ f$ și $ g$, astfel încât:
* $ f(n) = O(g^2(n))$
* $ f(n) = \omega(\log(g(n)))$
* $ f(n) = \Omega(f(n)\cdot g(n))$
* $ f(n) = \Theta(g(n)) + \Omega(g^2(n))$
4. Verificați valoarea de adevăr a următoarelor propoziții:
* $ \sqrt{n} \in O(\log{n})$
* $ \log{n} \in O(\log{(\log{n})})$
* $ n \in O(\sqrt{n}\cdot\log{n})$
* $ n + \log{n} \in \Theta(n)$
* $ \log{(n\cdot \log{n})}\in\Theta(\log{n})$
* $ \sqrt{n}\in\omega(\log{n})$
==== Exerciții - syntactic sugars ====
5. Aduceți următoarele la o formă simplă (o clasă de complexitate ce depinde de o anume funcție):
* $ \frac{O(n\sqrt{n})}{\Theta(n)} = \ldots$
* $ \frac{\Theta(n)}{O(\log(n))} = \ldots$
6. Demonstrați/infirmați următoarele propoziții:
* $ f(n) = \Omega(\log(n)) \land g(n)=O(n) \implies f(n)=\Omega(\log(g(n))$
* $ f(n) = \Omega(\log(n)) \land g(n)=O(n) \implies f(n)=\Theta(\log(g(n))$
* $ f(n) = \Omega(g(n)) \land g(n)=O(n^2) \implies \frac{g(n)}{f(n)}=O(n)$
Soluțiile acestui laborator se găsesc [[https://ocw.cs.pub.ro/ppcarte/doku.php?id=aa:lab:sol:5|aici]]