Cosa sono Big e O in notazione Big O? Ho letto le definizioni e non dice ciò che O è pronunciato come "oh". Ad esempio, capisco che O (n) è la complessità di un algoritmo lineare in cui n potrebbe essere il numero di operazioni. ma cos'è una O ?
Cosa sono Big e O in notazione Big O? Ho letto le definizioni e non dice ciò che O è pronunciato come "oh". Ad esempio, capisco che O (n) è la complessità di un algoritmo lineare in cui n potrebbe essere il numero di operazioni. ma cos'è una O ?
Risposte:
Bene, la mia ipotesi sarebbe l'ordine, che coincide con Wikipedia .
Modifica: (mia (eventuali miglioramenti apprezzati)) traduzione dall'articolo di Wikipedia in tedesco
La lettera maiuscola O (all'epoca un omicron maiuscolo) come simbolo per l' ordine di (tedesco: "Ordnung von") fu usata per la prima volta dal teorico dei numeri tedesco Paul Bachman nel secondo numero del suo libro sulla teoria dei numeri analitici nel 1894. La notazione acquistò popolarità grazie al lavoro di Edmund Landau, un altro teorico dei numeri tedesco, al quale questa nomenclatura è ampiamente associata oggi, specialmente nella terminologia tedesca.
"Grande" significa "capitale" e "O" significa ordine, come in "ordine di complessità". Così chiamato a causa della convenzione di scrivere "ordine di complessità" come O (f (x)), ad esempio, con una lettera maiuscola 'O' o 'Grande O'. Nessuno ne parla molto perché "tutti" capiscono cosa significa, e capirlo non ti aiuta a capire l'analisi della complessità.
Per una comprensione dell'analisi della complessità, penso che il link pubblicato da topgun_ivard sia un buon punto di partenza. Potrebbe anche essere utile un buon libro di testo introduttivo relativo a strutture di dati o algoritmi.
O sta per ordine.
Fu originariamente introdotto dal matematico tedesco Paul Bachmann nel secondo volume dei suoi libri sulla teoria dei numeri Die Analytische Zahlentheorie , pubblicato nel 1894 (p. 401) . Nota, dopo una formula in cui usa per la prima volta la notazione:
(...) wenn wir durch das Zeichen O (n) einde Grösse ausdrücken, deren Ordnung in Bezug auf n die Ordnung von n nicht überschreitet (...)
La mia traduzione:
(...) dove con la notazione O (n) indichiamo una grandezza di cui l'ordine con riferimento a n non supera l'ordine di n (...)
Contrariamente a quanto altri hanno affermato, nulla nel suo testo indica che si tratta in realtà di un omikron della capitale greca. Usa molti personaggi sia greci che latini, quindi non c'è davvero modo di dirlo. Dato il suo uso continuato di "Ordnung n log n " ecc. Nel testo, è chiaro che sta per "Ordnung" (tedesco per "ordine" in caso di dubbio), ma che potrebbe comunque lasciare aperto l'uso di una fantasia greca O.
Tuttavia, l'origine dell'omikron è più probabilmente un retrone a causa di Donald Knuth che ha introdotto i simboli omega (Ω) e theta (Θ) per concetti correlati nel suo articolo Big Omicron e Big Omega e Big Theta , o forse Hardy e Littlewood che introdotto un simbolo omega in precedenza.
Mi piace questo articolo , sperando che lo trovi utile anche tu!
Citando una sezione dell'articolo:
Big Greek Letters
Big O è spesso usato in modo improprio. Big O o Big Oh è in realtà l'abbreviazione di Big Omicron. Rappresenta il limite superiore della complessità asintotica. Quindi se un algoritmo è O (n log n) esiste una costante c tale che il limite superiore è cn log n.
Θ (n log n) (Big Theta) è più strettamente legato a quello. Un tale algoritmo significa che esistono due costanti c1 e c2 tali che c1n log n <f (n) <c2n log n.
Ω (n log n) (Big Omega) afferma che l'algoritmo ha un limite inferiore di cn log n.
Ce ne sono altri ma questi sono i più comuni e Big O è il più comune di tutti. Tale distinzione non è in genere importante ma vale la pena notare. La notazione corretta è la notazione corretta, dopo tutto.
Cos'è Big O?
La notazione O grande cerca di descrivere la complessità relativa di un algoritmo riducendo il tasso di crescita ai fattori chiave quando il fattore chiave tende all'infinito. Per questo motivo, sentirai spesso la frase complessità asintotica. Nel fare ciò, tutti gli altri fattori vengono ignorati. È una rappresentazione relativa della complessità.
Cosa non è Big O?
Big O non è un test delle prestazioni di un algoritmo. È anche nozionale o astratto in quanto tende a ignorare altri fattori. La complessità dell'algoritmo di ordinamento è generalmente ridotta al numero di elementi ordinati come fattore chiave. Questo va bene ma non tiene conto di problemi come:
Utilizzo della memoria: un algoritmo potrebbe utilizzare molta più memoria di un altro. A seconda della situazione, questo potrebbe essere qualsiasi cosa, da completamente irrilevante a critico; Costo del confronto: è possibile che il confronto tra elementi sia veramente costoso, il che potrebbe potenzialmente cambiare qualsiasi confronto tra algoritmi nel mondo reale; Costo degli elementi in movimento: la copia degli elementi è in genere economica ma non è necessariamente così; eccetera.
"f (x) è big-oh di g (x)"
È un modo matematico per prevedere la crescita delle funzioni.
Lascia che f e g siano funzioni dall'insieme di numeri interi o dall'insieme o dai numeri reali all'insieme dei numeri reali. Diciamo che f (x) è O (g (x)) se ci sono costanti C e k tali che | f (x) | <= C | g (x) | ovunque x> k.
Leggeresti questo come "f (x) è big-oh di g (x)"
Il big-O è talvolta chiamato un simbolo Landau dal matematico tedesco Edmund Landau. Non penso che significhi qualcosa di diverso. Hai anche le simili notazioni big-Omega e big-Theta. I simboli sono arbitrari come sempre usando theta per indicare che gli angoli dei triangoli erano nella tua classe di geometria planare del liceo.
Correction @ back2dos ha fornito una spiegazione soddisfacente per O in riferimento all'ordine. Ottimo lavoro. Vedi la sua risposta.
Donald Knuth lo ha applicato allo studio della complessità dei programmi per computer.
Se vuoi trovare il motivo per cui è stata usata la notazione, dovresti leggere
"Analytische Zahlentheorie" di Paul Bachmann del 1892
EDIT: Si scopre che mi sbaglio. Tuttavia, forse questo aiuta qualcuno a mantenere dritti i propri simboli, quindi non lo cancellerò.
In realtà, non è la lettera latina Oh , è la lettera greca Omicron . Sfortunatamente, quei due hanno lo stesso identico glifo, quindi, nel tempo, la versione originale è stata corrotta, e ora è solo Oh .
La scelta del simbolo in realtà non ha alcun significato particolare, è stata scelta come dispositivo mnemonico :
Questo è tutto. Non ha alcun significato reale, è solo un gioco di parole, se vuoi, per aiutarti a ricordare più facilmente la semantica.
AGGIORNAMENTO: Tentativo di ripulire la mia risposta ed essere più accurato
La notazione O grande è un modo per caratterizzare le funzioni in base ai tassi di crescita. La O sta per ordine (il primo ordine è n secondo ordine essendo n-quadrato ecc.). E se non sbaglio questo sarebbe lo scenario peggiore per un metodo di runtime (o archiviazione) dato N elementi. Maggiore è l'ordine, peggiore sarà il metodo.
Ad esempio, cercare un record in un array è O (1) (credo in qualche implementazione di una tabella hash che è anche il caso). Aggiungere un valore alla fine di un elenco di collegamenti sarebbe O (N) perché devi arrivare alla fine dell'elenco prima di poter aggiungere l'elemento ecc.
Questa risposta dovrebbe essere leggermente più corretta del mio primo tentativo :)