Input
n può essere il numero di elementi, vertici, bit o cifre. Va dichiarato.
Algoritmi · Analisi della complessità
La notazione asintotica descrive come cresce il costo di un algoritmo quando la dimensione dell’input diventa grande. Ignora dettagli di macchina e costanti, ma non la struttura del problema.
Si sceglie una misura della dimensione n e si conta un’operazione dominante: confronti, accessi, somme o allocazioni. Il tempo T(n) e lo spazio S(n) sono funzioni di n, non secondi o megabyte precisi.
n può essere il numero di elementi, vertici, bit o cifre. Va dichiarato.
Conta quante volte si esegue un’operazione significativa.
Memoria aggiuntiva oltre all’input; include anche lo stack ricorsivo.
| Simbolo | Significato | Definizione | Lettura |
|---|---|---|---|
| O(g(n)) | Limite superiore asintotico | 0 ≤ f(n) ≤ cg(n) | Non cresce più velocemente di g, a costanti vicino. |
| Ω(g(n)) | Limite inferiore asintotico | 0 ≤ cg(n) ≤ f(n) | Cresce almeno quanto g. |
| Θ(g(n)) | Limite stretto | c₁g(n) ≤ f(n) ≤ c₂g(n) | Stesso ordine di crescita. |
| o(g(n)) | Limite superiore stretto | lim f(n)/g(n) = 0 | f cresce strettamente più lentamente. |
| ω(g(n)) | Limite inferiore stretto | lim f(n)/g(n) = ∞ | f cresce strettamente più velocemente. |
Nelle prime tre definizioni esistono costanti positive e una soglia n₀ oltre la quale la disuguaglianza vale. Θ(g(n)) equivale all’intersezione O(g(n)) ∩ Ω(g(n)).
| Ordine | Nome | Esempio tipico | n = 1.000 |
|---|---|---|---|
| Θ(1) | costante | accesso a un indice | 1 |
| Θ(log n) | logaritmico | ricerca binaria | ≈ 10 |
| Θ(n) | lineare | scansione | 1.000 |
| Θ(n log n) | linearitmico | merge sort | ≈ 10.000 |
| Θ(n²) | quadratico | doppi cicli | 1.000.000 |
| Θ(2ⁿ) | esponenziale | enumerazione di sottoinsiemi | impraticabile |
Per log n è usata base 2. La base del logaritmo cambia solo per un fattore costante e quindi non cambia la classe Θ.
Costo minimo tra gli input di dimensione n. È utile per descrivere algoritmi adattivi.
Valore atteso rispetto a un modello probabilistico degli input, che va dichiarato.
Costo massimo per input di dimensione n; offre una garanzia.
Costo medio per operazione su una sequenza, senza assumere input casuali.
for i = 0 … n - 1
visita A[i]n iterazioni a costo costante: Θ(n).
for i = 0 … n - 1
for j = i + 1 … n - 1n(n−1)/2 = Θ(n²).
while n > 1
n = n / 2Dopo k passi n/2ᵏ ≤ 1, quindi k = Θ(log n).
8n³ + 2n² log n + 900
for (i = 1; i < n; i *= 3)
È vero che n log n = o(n²)?