Perché viene insegnato Big O invece di Big Theta?


21

La notazione Big O fornisce un limite superiore a una funzione mentre Big Theta fornisce un limite stretto. Tuttavia trovo che la notazione di Big O sia tipicamente (e informalmente) insegnata e usata quando significano davvero Big Theta.

ad es. "Quicksort è O (N ^ 2)" può essere trasformato nell'affermazione molto più forte "Quicksort è Θ (N ^ 2)"

Mentre l'uso di Big O è tecnicamente corretto, un uso più diffuso di Big Theta non sarebbe più espressivo e porterebbe a meno confusione? C'è qualche motivo storico per cui questo Big O è più comunemente usato?

Note di Wikipedia :

Informalmente, specialmente nell'informatica, alla notazione di Big O è spesso consentito abusare in qualche modo di descrivere un vincolo asintotico dove l'uso della notazione di Big Theta potrebbe essere più appropriato in un dato contesto.


3
So che questo non riguarda davvero la domanda, ma quicksort non è theta (N ^ 2). È O (N ^ 2).
jsternberg,

Big O è ciò che le persone principianti / non CS devono sapere. Big Theta è ciò che è coperto in un'introduzione agli algoritmi, che non sarà preso da tutti i maggiori. Coloro che hanno avuto una classe di algoritmi possono leggere più in profondità la notazione Big O se lo desiderano. Non sono sicuro di cosa si riferisca la citazione di Wikipedia. Con le pubblicazioni accademiche avrai una fessura alla gola in una conferenza se confondi Big O e big Theta. Alcune persone trascorrono tutta la vita a inseguire il Theta e questi sono problemi DURI DURI.
Giobbe

@jsternberg Tecnicamente hai ragione. Anche questo è vero, ma privo di significato: "Quicksort in ogni caso (peggio, migliore, ...) è O (n ^ 100). Ma sono d'accordo con OP che dovrebbe essere più accurato: il caso peggiore di QuickSort è Theta (N ^ 2), QuickSort nel migliore dei casi è Theta (NlogN), perché in ogni caso avremo funzioni diverse
Eldar

Risposte:


26

Perché di solito sei solo interessato al caso peggiore quando analizzi le prestazioni. Pertanto, è sufficiente conoscere il limite superiore.

Quando funziona più veloce del previsto per un dato input, va bene, non è il punto critico. Sono per lo più informazioni trascurabili.

Alcuni algoritmi, come ha notato @Peter Taylor, non hanno alcun limite. Vedi quicksort per esempio che è O (n ^ 2) e Omega (n).

Inoltre, i limiti stretti sono spesso più difficili da calcolare.

Guarda anche:


6
Ma Big O non corrisponde necessariamente alle prestazioni peggiori. Potrei dire che quicksort funziona in O (2 ^ n) ed è corretto al 100%. Sarebbe molto più significativo se dico che l'algoritmo X viene eseguito in Theta (N ^ 2) anziché in O (N ^ 2).
tskuzzy,

Inoltre, i limiti stretti vengono quasi sempre calcolati durante l'analisi degli algoritmi anziché solo un limite superiore. Sto chiedendo perché le persone non usano semplicemente la notazione theta molto più espressiva quando possono.
tskuzzy,

9
Ti ho detto perché la maggior parte dei programmatori non lo usa. Siamo pigri e non abbiamo bisogno di tanta precisione. Nessuno ti impedisce di usare il grande theta se vuoi. Vai avanti, fallo. La scelta dell'algoritmo molto probabilmente non ne trarrà molto beneficio. Non ho mai sentito parlare di un programmatore confuso dalla notazione O grande. Anch'io non lo trovo affatto confuso.
Falcon,

9

Uno dei motivi è che ci sono molti casi in cui Θ non è noto. Ad esempio, la moltiplicazione Matrix è O (n ^ 2.376) ma non è noto alcun limite stretto. Certo, per quanto posso dire, non v'è una stretta diretto a La moltiplicazione di matrici, ma non sappiamo il suo valore.


Ma questo sarebbe il limite per il tempo di esecuzione di un problema, non un algoritmo particolare. Mentre la moltiplicazione della matrice in generale può essere risolta più velocemente del tempo cubico, l'algoritmo ingenuo è Θ (n ^ 3), non importa quale.
tskuzzy,

5
@tskuzzy, prendi quicksort. Non ha un legame Theta, perché è O (n ^ 2) e Omega (n).
Peter Taylor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.