Cheetsheet: constanta « logaritmica « polinomiala « exponentiala « factoriala
1. Dați exemple de câte o funcție din următoarele clase de complexitate:
$ O(n)$
Trebuie sa gasim functii care cresc maxim la fel de repede ca f(n)=n.
Exemple soluții posibile: g(n)=n+6, g(n)=8n+7 (aceeasi crestere),
g(n)=log(n) (crestere mai mica)
$Ω(log(n))$
Trebuie sa gasim functii care cresc mai repede sau la fel de repede ca f(n)=n^2.
Exemple soluții posibile: g(n)=100*log(n)+5, (aceeasi crestere), g(n)=n^3,
g(n)=nlog(n) (mai repede)
$θ(n^2)$
Trebuie sa gasim functii care cresc la fel de repede ca f(n)=log(n).
Exemple soluții posibile: g(n)=a*n^2+b*n+c*log(n)+d, a>0 (aceeasi crestere ca n^2, fiind dominant in functie)
$ɷ(1/n)$
Trebuie sa gasim functii care cresc strict mai repede decat f(n)=1/n.
Cum 1/n este o functie descrescatoare, solutia este orice functie crescatoare.
Exemple soluții posibile: g(n)=c, c = constanta, g(n)=n+23, g(n)=nlogn+n^4 etc.
$ o(3^n)$
Trebuie sa gasim functii care cresc strict mai incet decat f(n)=3^n.
Exemple soluții posibile: g(n)=n^p,p>=0 etc.
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)∈o(√n)$
f(n)=√n, g(n)=log(n). g(n)∈o(f(n))⇒ ∀c>0, ∃n_0∈N, astfel incat ∀ n≥n_0, g(n)≤ c·f(n)
⇒ log(n)≤c·√n, adevarat pentru c=1 si n_0=100.
$ 100·n^2∈O(2^n)$
f(n)=2^n, g(n)=100·n^2. g(n)∈O(f(n))⇒ ∃c>0, ∃n_0∈N, astfel incat ∀ n≥n_0, g(n)≤ c·f(n)
⇒ 100·n^2≤c·2^n, adevarat pentru c=100 si n_0=4.
$ 0,001·n^3∈Ω(20√n)$
f(n)=20√n, g(n)=0,001·n^3. g(n)∈Ω(f(n))⇒ ∃c>0, ∃n_0∈N, astfel incat ∀ n≥n_0, c·g(n)≤ f(n)
⇒ 0,001·n^3≤20√n, adevarat pentru c=0.001/20 si n_0=1.
$ 10·n∈θ(n)$
f(n)=n, g(n)=10·n. g(n)∈θ(f(n))⇒ ∃c_1, c_2>0, ∃n_0∈N, astfel incat ∀ n≥n_0, c_1·g(n)≤ f(n) ≤ c_2·g(n)
⇒ c_1·n≤ 10n ≤c_2 n, adevarat pentru c_1=8, c_2=10 si n_0=1.
$ n∈θ(10n)$
f(n)=10·n, g(n)=n. g(n)∈θ(f(n))⇒ ∃c_1, c_2>0, ∃n_0∈N, astfel incat ∀ n≥n_0, c_1·g(n)≤ f(n) ≤ c_2·g(n)
⇒ c_1·10·n≤ n ≤c_2·10·n, adevarat pentru c_1=1/10, c_2=1 si n_0=1.
4. Verificați valoarea de adevăr a următoarelor propoziții:
$ √n∈O(logn)$
f(n)=logn, g(n)=√n. Cum f si g sunt functiile f si g sunt monotone si cresctoare, verific afirmatia utilizand limite.
lim(n→∞)(g(n)/f(n))=lim(n→∞)(√n/log(n))=(l'Hospital)lim(n→∞)(n/2*√n)=1/2*lim(n→∞)(√n)=+∞ ⇒ Fals
$ logn∈O(log(log n))$
f(n)=log(logn), g(n)=logn. Cum f si g sunt functiile f si g sunt monotone si cresctoare, verific afirmatia utilizand limite.
lim(n→∞)(g(n)/f(n))=lim(n→∞)(logn/log(log n))=(l'Hospital)lim(n→∞)(1/n / 1/logn * 1/n)=1/2*lim(n→∞)(logn)=+∞ ⇒ Fals
$ n∈O(√n logn)$
f(n)=√n logn, g(n)=n. Cum f si g sunt functiile f si g sunt monotone si cresctoare, verific afirmatia utilizand limite.
lim(n→∞)(g(n)/f(n))=lim(n→∞)(n/√n logn)=lim(n→∞)(√n/logn)=(l'Hospital)lim(n→∞)(1/2 * 1/n^2 / 1/n)=1/2*lim(n→∞)(1/n)=0 ⇒ Fals
$ n+logn∈θ(n)$
f(n)=n, g(n)=n + logn. Cum f si g sunt functiile f si g sunt monotone si cresctoare, verific afirmatia utilizand limite.
lim(n→∞)(g(n)/f(n))=lim(n→∞)(n + logn/n)=1 + lim(n→∞)(logn/n)=(l'Hospital)1 + lim(n→∞)(1/n)= 1 ⇒ Adevarat
$ log(nlogn)∈θ(logn)$
f(n)=logn, g(n)=log(nlogn). Cum f si g sunt functiile f si g sunt monotone si cresctoare, verific afirmatia utilizand limite.
lim(n→∞)(g(n)/f(n))==(l'Hospital)lim(n→∞)(1/nlogn*(logn+1) / 1/n)=lim(n→∞)(1/logn*(logn+1)) =lim(n→∞)(1 + 1/logn)=1 ⇒ Adevarat
$ √n∈ɷ(log n)$
f(n)=logn, g(n)= √n. Cum f si g sunt functiile f si g sunt monotone si cresctoare, verific afirmatia utilizand limite.
lim(n→∞)(g(n)/f(n))=lim(n→∞)(√n/logn)= (l'Hospital)lim(n→∞)(1/2*√n)= ∞ ⇒ Adevarat
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$
Fie f(n)∈O(n/√n) si g(n)∈θ(n).
f(n)∈O(n/√n) ⇒
* $ \frac{\Theta(n)}{O(\log(n))} = \ldots$