Salta al contenuto
Note per Studenti Notazione asintotica

Notazione asintotica

In questa pagina 7

Si considerano funzioni f,g:N→Rf, g : \mathbb{N} \to \mathbb{R} positive per nn abbastanza grande. L'analisi asintotica ignora i fattori moltiplicativi costanti e i termini additivi non dominanti (vedi Complessità in tempo e caso pessimoPerché lo studio sperimentale non basta; complessità al caso pessimo come massimo sul numero di operazioni tra le istanze di una data taglia; stima con limiti superiore e inferiore senza trovare l'istanza peggiore; esempi arrayMax, prefixAverages e InsertionSort; efficienza asintotica e limiti dell'analisi.Complessità in tempo e caso pessimo →). È lo stesso ragionamento del confronto tra infiniti in Analisi 1 (Limiti di successioniUna successione ha limite l se, da un certo indice in poi, i suoi termini stanno vicini a l quanto si vuole; definizioni con epsilon, limiti infiniti e unicità.Limiti di successioni →, Asintoticità e o-piccoloa_n ~ b_n se il loro rapporto tende a 1, a_n = o(b_n) se tende a 0; nei prodotti e quozienti ogni fattore si può sostituire con uno asintotico.Asintoticità e o-piccolo →, Limiti notevoli e gerarchia degli infinitiI limiti di base per sciogliere le forme indeterminate delle successioni: potenze, polinomi, il numero e, esponenziali, la gerarchia logaritmi < potenze < esponenziali < fattoriale < n^n e la razionalizzazione.Limiti notevoli e gerarchia degli infiniti →): la differenza è che qui si lavora con disuguaglianze e costanti esplicite invece che con limiti, e il simbolo oo ha lo stesso significato "strettamente trascurabile" (f/g→0f/g \to 0).

Le quattro definizioni

Definizione (notazioni OO, Ω\Omega, Θ\Theta e oo)

Notazione Definizione Si legge
f∈O(g)f \in O(g) ∃ c>0, n0≥1\exists\, c > 0,\ n_0 \ge 1 : f(n)≤c g(n)f(n) \le c\,g(n) per ogni n≥n0n \ge n_0 ff cresce al più come gg
f∈Ω(g)f \in \Omega(g) ∃ c>0, n0≥1\exists\, c > 0,\ n_0 \ge 1 : f(n)≥c g(n)f(n) \ge c\,g(n) per ogni n≥n0n \ge n_0 almeno come gg
f∈Θ(g)f \in \Theta(g) f∈O(g)f \in O(g) e f∈Ω(g)f \in \Omega(g), cioè c′g≤f≤c′′gc' g \le f \le c'' g definitivamente come gg
f∈o(g)f \in o(g) ∀ c>0 ∃ n0\forall\, c > 0\ \exists\, n_0 : f(n)≤c g(n)f(n) \le c\,g(n) per n≥n0n \ge n_0; equivale a lim⁡f/g=0\lim f/g = 0 strettamente meno di gg

Esempio. 3n+4∈O(n)3n+4\in O(n) con c=4c=4 e n0=4n_0=4, perché 3n+4≤4n  ⟺  n≥43n+4\le4n\iff n\ge4 (si porta 3n3n a destra: 4≤n4 \le n).

Per vederlo, il grafico mostra 3n+43n+4 sotto 4n4n dal punto n0=4n_0=4 in poi: prima i due andamenti si incrociano, ma ciò che conta è che da n0n_0 in avanti la disuguaglianza resta vera per sempre.

Grafico interattivo: 3n+4 è O(n): con c = 4 la retta 4n sta sopra 3n+4 da n0 = 4 in poi (in n = 4 valgono entrambe 16)

Le costanti cc ed n0n_0 non dipendono da nn. Per oo vale invece "per ogni cc", e n0n_0 dipende da cc.

Esempi con le costanti

  • 3n+4∈O(n)3n + 4 \in O(n) con c=7c = 7, n0=1n_0 = 1: per n≥1n \ge 1 vale 4≤4n4 \le 4n, quindi 3n+4≤3n+4n=7n3n + 4 \le 3n + 4n = 7n. Anche con c=4c = 4 e n0=4n_0 = 4: 3n+4≤4n  ⟺  n≥43n + 4 \le 4n \iff n \ge 4.
  • n+2n2∈O(n2)n + 2n^2 \in O(n^2) con c=3c = 3, n0=1n_0 = 1: per n≥1n \ge 1 si ha n≤n2n \le n^2 (moltiplicando 1≤n1 \le n per n>0n>0), quindi n+2n2≤n2+2n2=3n2n + 2n^2 \le n^2 + 2n^2 = 3n^2.
  • 3n+4∈O(n2)3n + 4 \in O(n^2) con c=4c = 4, n0=4n_0 = 4: per n≥4n \ge 4 vale 3n+4≤4n3n + 4 \le 4n (sopra) e 4n≤4n24n \le 4n^2 perché n≤n2n \le n^2. Vero ma poco informativo: non è un limite stretto.
  • 2100∈O(1)2^{100} \in O(1) con c=2100c = 2^{100}: una costante è limitata da se stessa per ogni nn.
  • 3n+4∈Ω(n)3n + 4 \in \Omega(n) con c=3c = 3: 3n+4≥3n3n + 4 \ge 3n perché 4>04 > 0. 6n2+1∈Ω(n)6n^2 + 1 \in \Omega(n) con c=6c = 6: 6n2+1≥6n2≥6n6n^2 + 1 \ge 6n^2 \ge 6n per n≥1n \ge 1.
  • 100n∈o(n2)100 n \in o(n^2): dato qualsiasi c>0c>0, 100n≤c n2  ⟺  100≤c n  ⟺  n≥100/c100 n \le c\,n^2 \iff 100 \le c\,n \iff n \ge 100/c (si divide per n>0n>0); si prende n0=⌈100/c⌉n_0 = \lceil 100/c \rceil. Qui n0n_0 dipende da cc, come richiesto da oo.
  • 3n/log⁡2n∈o(n)3n/\log_2 n \in o(n) perché il rapporto 3n/log⁡2nn=3log⁡2n→0\dfrac{3n/\log_2 n}{n} = \dfrac{3}{\log_2 n} \to 0 (limite di successione: Limiti di successioniUna successione ha limite l se, da un certo indice in poi, i suoi termini stanno vicini a l quanto si vuole; definizioni con epsilon, limiti infiniti e unicità.Limiti di successioni →).

Proprietà

  1. Polinomi: ∑i=0kaini∈Θ(nk)\sum_{i=0}^{k} a_i n^i \in \Theta(n^k) se ak>0a_k > 0 e k,aik, a_i costanti. Per OO si prende c=∑∣ai∣c = \sum |a_i|, n0=1n_0 = 1. Per Ω\Omega si pone γ=max⁡i<k∣ai∣\gamma = \max_{i<k}|a_i| e si usa che ∑i<kaini≥−kγnk−1\sum_{i<k} a_i n^i \ge -k\gamma n^{k-1}, da cui per n≥2kγ/akn \ge 2k\gamma/a_k si ottiene ≥ak2nk\ge \frac{a_k}{2} n^k. Passaggi: per n≥1n \ge 1 ciascuno dei kk termini ainia_i n^i con i<ki<k vale in modulo al più γni≤γnk−1\gamma n^{i} \le \gamma n^{k-1}, quindi la loro somma non scende sotto −kγnk−1-k\gamma n^{k-1}. Allora f(n)≥aknk−kγnk−1=nk−1 (akn−kγ),f(n) \ge a_k n^k - k\gamma n^{k-1} = n^{k-1}\,(a_k n - k\gamma), e se n≥2kγ/akn \ge 2k\gamma/a_k si ha kγ≤akn2k\gamma \le \frac{a_k n}{2}, cioè akn−kγ≥akn2a_k n - k\gamma \ge \frac{a_k n}{2}, da cui f(n)≥ak2nkf(n) \ge \frac{a_k}{2} n^k. Esempio: (n+1)5∈Θ(n5)(n+1)^5 \in \Theta(n^5), perché sviluppando con il Binomio di NewtonLa formula per sviluppare (a+b)^n con i coefficienti binomiali.Binomio di Newton → si ottiene un polinomio di grado 55 con coefficiente direttivo 1>01>0.

    Proprietà (polinomio contro esponenziale, logaritmo contro potenza)

    1. Polinomio contro esponenziale: nk∈o(an)n^k \in o(a^n) se k>0k > 0, a>1a > 1 (limite nk/an→0n^k/a^n \to 0; è la gerarchia degli infiniti di Limiti notevoli e gerarchia degli infinitiI limiti di base per sciogliere le forme indeterminate delle successioni: potenze, polinomi, il numero e, esponenziali, la gerarchia logaritmi < potenze < esponenziali < fattoriale < n^n e la razionalizzazione.Limiti notevoli e gerarchia degli infiniti →, che si può giustificare con il criterio del rapporto: (n+1)k/an+1nk/an=(1+1/n)ka→1a<1\dfrac{(n+1)^k/a^{n+1}}{n^k/a^n} = \dfrac{(1+1/n)^k}{a} \to \dfrac1a < 1, quindi il rapporto tende a 00, vedi Criteri del rapporto e della radice per successioniPer a_n > 0: se a_(n+1)/a_n oppure la radice n-esima di a_n tende a un limite minore di 1 la successione tende a 0, se maggiore di 1 tende a +∞; con limite 1 non si conclude.Criteri del rapporto e della radice per successioni →).
    2. Logaritmo contro potenza: (log⁡bn)k∈o(nh)(\log_b n)^k \in o(n^h) per b>1b > 1, k,h>0k, h > 0. Si pone m=log⁡bnm = \log_b n: nh=(bh)mn^h = (b^h)^m con a=bh>1a = b^h > 1 e mk∈o(am)m^k \in o(a^m) per il punto 2.

Esempio. Per n=100n=100 si ha n3=106n^3=10^6 mentre 2n≈1,3⋅10302^n\approx1{,}3\cdot10^{30}, coerente con n3∈o(2n)n^3\in o(2^n).

  1. Cambio di base: log⁡bn=log⁡an⋅log⁡ba\log_b n = \log_a n \cdot \log_b a (Esponenziale e logaritmoLa funzione esponenziale a^x (base positiva diversa da 1) e la sua inversa, il logaritmo in base a, con grafici e proprietà.Esponenziale e logaritmo →), quindi log⁡bn∈Θ(log⁡an)\log_b n \in \Theta(\log_a n) per basi costanti, perché log⁡ba\log_b a è una costante positiva. Esempio: log⁡10n=log⁡2n⋅log⁡102≈0,301log⁡2n\log_{10} n = \log_2 n \cdot \log_{10} 2 \approx 0{,}301 \log_2 n. Dentro la notazione la base si omette; fuori si assume 22. Inoltre alog⁡2n=nlog⁡2aa^{\log_2 n} = n^{\log_2 a} (entrambi valgono 2log⁡2a⋅log⁡2n2^{\log_2 a \cdot \log_2 n}, come si vede scrivendo a=2log⁡2aa = 2^{\log_2 a} e n=2log⁡2nn = 2^{\log_2 n}).

    Proprietà (legami tra le notazioni)

    1. Legami tra notazioni:
      • f∈o(g)⇒f∈O(g)f \in o(g) \Rightarrow f \in O(g) (si prende c=1c = 1);
      • f∈O(g)  ⟺  g∈Ω(f)f \in O(g) \iff g \in \Omega(f) (si divide per cc);
      • f∈O(g)f \in O(g) e g∈O(f)⇒f∈Θ(g)g \in O(f) \Rightarrow f \in \Theta(g);
      • f∈O(g)⇒f+g∈Θ(g)f \in O(g) \Rightarrow f + g \in \Theta(g) (perché g≤f+g≤(c+1)gg \le f + g \le (c+1)g);
      • non valgono: O⇒oO \Rightarrow o (f=g=nf = g = n) né O⇒ΘO \Rightarrow \Theta (f=nf = n, g=n2g = n^2).

Esempio. Con f=nf=n e g=n2g=n^2: f∈O(g)f\in O(g) e f∈o(g)f\in o(g), ma f∉Θ(g)f\notin\Theta(g).

Sommatorie notevoli

Formula (sommatorie notevoli)

∑i=0ni=n(n+1)2,∑i=0ni2=n(n+1)(2n+1)6∈Θ(n3),∑i=0nai=an+1−1a−1 (a≠1).\sum_{i=0}^{n} i = \frac{n(n+1)}{2}, \qquad \sum_{i=0}^{n} i^2 = \frac{n(n+1)(2n+1)}{6} \in \Theta(n^3), \qquad \sum_{i=0}^{n} a^i = \frac{a^{n+1} - 1}{a - 1}\ (a \ne 1).

Come si ricavano (vedi SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →; le prime due si dimostrano per induzione, Principio di induzionePer dimostrare una proprietà per ogni n basta il passo base e il passo induttivo da n a n+1.Principio di induzione →):

Esempio. ∑i=010i=10⋅112=55\sum_{i=0}^{10}i=\frac{10\cdot11}{2}=55 e ∑i=032i=24−12−1=15\sum_{i=0}^{3}2^i=\frac{2^4-1}{2-1}=15.

Utili anche ⌊x⌋\lfloor x \rfloor (più grande intero ≤x\le x), ⌈x⌉\lceil x \rceil (più piccolo intero ≥x\ge x) e x mod yx \bmod y (resto della divisione intera, % in C): 39 mod 7=439 \bmod 7 = 4.

Terminologia

Complessità Nome
Θ(log⁡n)\Theta(\log n) logaritmica
Θ(n)\Theta(n) lineare
Θ(n2)\Theta(n^2), Θ(n3)\Theta(n^3) quadratica, cubica
Θ(nk)\Theta(n^k), kk costante polinomiale
Ω(an)\Omega(a^n), a>1a > 1 esponenziale

Ordine crescente: 1≺log⁡n≺n≺n≺nlog⁡n≺n2≺n3≺2n1 \prec \log n \prec \sqrt{n} \prec n \prec n \log n \prec n^2 \prec n^3 \prec 2^n (ogni funzione è oo della successiva). Per confrontare due espressioni si studia il limite del rapporto, come nella gerarchia degli infinitiI limiti di base per sciogliere le forme indeterminate delle successioni: potenze, polinomi, il numero e, esponenziali, la gerarchia logaritmi < potenze < esponenziali < fattoriale < n^n e la razionalizzazione.Limiti notevoli e gerarchia degli infiniti →: per esempio nlog⁡n/n2=log⁡n/n→0n\log n / n^2 = \log n / n \to 0, quindi nlog⁡n∈o(n2)n \log n \in o(n^2).

Grafico interattivo: Crescita di n, n·log₂n, n² e 2ⁿ per n da 1 a 10 (numero di operazioni, asse verticale fino a 100): a n = 10 valgono 10, 33, 100 e 1024; l'esponenziale supera il quadrato già da n = 5 e esce dal grafico a n ≈ 6,6

Esempio svolto

Un algoritmo su un array XX di nn interi esegue c1nc_1 n operazioni per ogni intero pari e c2⌈log⁡2n⌉c_2 \lceil \log_2 n \rceil per ogni dispari. Nel caso peggiore tutti gli elementi sono pari: n⋅c1n=c1n2n \cdot c_1 n = c_1 n^2 (più costanti), quindi Θ(n2)\Theta(n^2). Limite superiore: ogni elemento costa al più max⁡(c1n,c2⌈log⁡2n⌉)≤c′n\max(c_1 n, c_2 \lceil \log_2 n \rceil) \le c' n, totale ≤c′n2\le c' n^2. Inferiore: l'istanza di soli pari costa c1n2c_1 n^2. Il passaggio max⁡(c1n,c2⌈log⁡2n⌉)≤c′n\max(c_1 n, c_2 \lceil \log_2 n \rceil) \le c' n vale perché ⌈log⁡2n⌉≤n\lceil \log_2 n \rceil \le n per ogni n≥1n\ge1 (log⁡2n\log_2 n cresce molto più lentamente di nn), quindi basta prendere c′=max⁡(c1,c2)c'=\max(c_1,c_2).

Errori comuni

  • Confondere "è O(n2)O(n^2)" con "è quadratico": OO è solo un limite superiore, 3n+4∈O(n2)3n + 4 \in O(n^2) è vero ma non stretto; per "esattamente" serve Θ\Theta.
  • Dire che f∈O(g)f \in O(g) implica f∈Θ(g)f \in \Theta(g), o che OO implica oo.
  • Far dipendere cc o n0n_0 da nn.
  • Dimenticare che log⁡\log senza base fuori dalla notazione è in base 2.

Versione ripasso

Esercizi su questo argomento

Teoria collegata