Soluții Notații asimptotice

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$