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) \}$
$ 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) \}$
$ \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) \}$
$ 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ă: $ \exists g \in \Theta(n)$ și $ \exists h \in O(\log(n))$ a.î. $ 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: $ \forall f \in \Theta(n^2),\ \exists g \in O(n^2)$ și $ \exists h \in o(n)$ a.î. $ 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 $ \Theta(n)$ există o funcție egală în $ O(n)$ , putem vedea că există funcții în $ O(n)$ pentru care nu există niciun corespondent în $ \Theta(n)$ .
Ca regulă, fiecare notație asimptotică din stânga unui egal, ar trebui citită ca o funcție cuantificată universal ($ \forall f$ ) din acea clasă, iar fiecare notație asimptotică din dreapta unui egal ar trebui citită ca o funcție cuantificată existențial ($ \exists g$ ) din clasa respectivă.
$\left(\frac{\omega(n^2)}{\Theta(n)}\right) = \Omega(n) + o(n)$
$ \forall f \in \omega(n^2)\ and\ \forall g \in \Theta(n),\ \exists h \in \Omega(n)$ și $ \exists j \in o(n)$ a.î. $ \left(\frac{f(n)}{g(n)}\right) = h (n) + j(n),\ \forall n \in \mathbb{R}^{+}$
Exerciții
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)$