Qual è la differenza tra il Big-O la notazione O(n)e Little-O notazione o(n)?
Qual è la differenza tra il Big-O la notazione O(n)e Little-O notazione o(n)?
Risposte:
f ∈ O (g) dice, essenzialmente
Per almeno una scelta di una costante k > 0, puoi trovare una costante a tale che la disuguaglianza 0 <= f (x) <= kg (x) vale per tutte le x> a.
Si noti che O (g) è l'insieme di tutte le funzioni per le quali vale questa condizione.
f ∈ o (g) dice, essenzialmente
Per ogni scelta di una costante k > 0, puoi trovare una costante a tale che la disuguaglianza 0 <= f (x) <kg (x) vale per tutte le x> a.
Ancora una volta, nota che o (g) è un set.
In Big-O, è necessario solo trovare un particolare moltiplicatore k per il quale la disuguaglianza vale oltre un minimo x .
In Little-o, deve esserci un minimo x dopo il quale la disuguaglianza è valida, non importa quanto piccolo diventi k , purché non sia negativo o zero.
Entrambi descrivono i limiti superiori, sebbene in qualche modo controintuitivamente, Little-o è l'affermazione più forte. C'è un divario molto più grande tra i tassi di crescita di f e g se f ∈ o (g) che se f ∈ O (g).
Un esempio della disparità è questo: f ∈ O (f) è vero, ma f ∈ o (f) è falso. Pertanto, Big-O può essere letto come "f ∈ O (g) significa che la crescita asintotica di f non è più veloce di g", mentre "f ∈ o (g) significa che la crescita asintotica di f è strettamente più lenta di g". È come <=contro <.
Più specificamente, se il valore di g (x) è un multiplo costante del valore di f (x), allora f ∈ O (g) è vero. Questo è il motivo per cui puoi eliminare le costanti quando lavori con la notazione big-O.
Tuttavia, affinché f ∈ o (g) sia vero, allora g deve includere una potenza maggiore di x nella sua formula, e quindi la relativa separazione tra f (x) e g (x) deve effettivamente aumentare quando x diventa più grande.
Per utilizzare esempi puramente matematici (anziché fare riferimento ad algoritmi):
Quanto segue è vero per Big-O, ma non sarebbe vero se si usasse little-o:
Quanto segue è vero per little-o:
Nota che se f ∈ o (g), ciò implica f ∈ O (g). es. x² ∈ o (x³) quindi è anche vero che x² ∈ O (x³), (di nuovo, pensa a O come <=e o come <)
ac'è kche ...", è "per ogni cosa che kc'è a..."
Big-O è troppo piccolo come lo ≤è <. Big-O è un limite superiore inclusivo, mentre little-o è un limite superiore rigoroso.
Ad esempio, la funzione f(n) = 3nè:
O(n²), o(n²)eO(n)O(lg n), o(lg n)oo(n)Analogamente, il numero 1è:
≤ 2, < 2e≤ 1≤ 0, < 0o< 1Ecco una tabella che mostra l'idea generale:

(Nota: la tabella è una buona guida ma la sua definizione del limite dovrebbe essere in termini di limite superiore invece del limite normale. Ad esempio, 3 + (n mod 2) oscilla tra 3 e 4 per sempre. È dentro O(1)nonostante non abbia un limite normale, perché ha ancora a lim sup: 4.)
Consiglio di memorizzare come la notazione Big-O si converte in confronti asintotici. I confronti sono più facili da ricordare, ma meno flessibili perché non si possono dire cose come n O (1) = P.
Trovo che quando non riesco a cogliere concettualmente qualcosa, pensare al motivo per cui si dovrebbe usare X è utile per capire X. (Per non dire che non l'hai provato, sto solo preparando il palco.)
[cose che sai] Un modo comune per classificare gli algoritmi è per runtime e citando la complessità big-Oh di un algoritmo, puoi ottenere una stima abbastanza buona di quale sia "migliore", a seconda di quale sia la funzione "più piccola" nella O! Anche nel mondo reale, O (N) è "migliore" di O (N²), escludendo cose sciocche come costanti super-massicce e simili. [/ Cose che sai]
Diciamo che c'è qualche algoritmo che gira in O (N). Abbastanza bene, eh? Ma diciamo che tu (persona brillante, tu) crei un algoritmo che gira in O ( N ⁄ loglogloglogN ). SÌÌ! È più veloce! Ma ti sentiresti sciocco scriverlo ancora e ancora quando scrivi la tua tesi. Quindi lo scrivi una volta e puoi dire "In questo documento, ho dimostrato che l'algoritmo X, precedentemente calcolabile nel tempo O (N), è in effetti calcolabile in o (n)."
Pertanto, tutti sanno che il tuo algoritmo è più veloce --- di quanto non è chiaro, ma sanno che è più veloce. Teoricamente. :)