Che cos'è O in Big O?


23

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 ?


13
È la quindicesima lettera dell'alfabeto inglese. È anche la quindicesima lettera dell'alfabeto greco.
Joel Etherton,

1
Giusto per chiarire: stai cercando il motivo per cui O è il simbolo che viene utilizzato (invece di Q o E o qualcos'altro) e quale significato, se presente, O ha su altri simboli?
FrustratedWithFormsDesigner,

6
@Joel: In realtà, è Omicron, e questo è il motivo per cui questa particolare lettera è stata scelta.
Jörg W Mittag,

questa risposta confuta (correttamente, penso) la teoria di Omicron.
Hawkeye Parker,

Risposte:


31

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.


5
Mentre può accadere che molti matematici lo abbiano indicato come tale, inizialmente non lo era. Se leggi libri di teoria dei numeri degli inizi del XX secolo, non troverai tale spiegazione. È quello che è e non riesco a leggere il tedesco per capire quale fosse il suo pensiero sulla notazione.
Jonathan Henson,

1
@Jonathan: post aggiornato.
back2dos,

Molto bella! Ho cercato in tutti i miei libri di teoria dei numeri e non sono riuscito a trovare una spiegazione della O da nessuna parte. +1
Jonathan Henson,

2
Ho sempre pronunciato come ordine di come solo dicendo O non significa molto.
Newtopian,

16

"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.


5
Mi dispiace, ma la notazione di Bachmann-Landau è stata inventata da un matematico tedesco, quindi non credo quasi che lo avrebbe chiamato dopo una parola inglese. In effetti, anche se fosse stato inventato da un matematico americano, probabilmente avrebbe ancora preso il nome da una parola tedesca, perché quando fu inventata (intorno al 1920, credo), la lingua internazionale della matematica era il tedesco. Inoltre, in remoto non ha nulla a che fare con la complessità.
Jörg W Mittag,

1
@Jörg: Sì, ma non sarebbe solo Ordnung , che l'articolo wiki tedesco afferma di essere l'origine: de.wikipedia.org/wiki/Landau-Symbole#Geschichte
back2dos

1
@Ethel potresti apportare una piccola modifica al tuo articolo in modo da poterti votare? Hai davvero ragione. Devi modificare prima che io possa votare.
Jonathan Henson,

1
@Jonathan, non sono sicuro di quale piccolo cambiamento tu voglia. Puoi semplicemente andare avanti e apportare la modifica che desideri? Oppure, potremmo semplicemente lasciare in piedi la risposta di back2dos, sembra che potrebbe aver comunque ottenuto la migliore risposta a causa di alcune ricerche eccellenti :)
Ethel Evans,

1
Hm, interessante. In Svezia, Big Oh è di solito chiamato "ordo" (latino per, beh, ordine) piuttosto che "ordine" (la parola svedese per ordine).
Vatine,

11

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.


2
Interessante. Suppongo tu abbia ragione. Ho appena cercato le definizioni nei libri di Landau e Bachmann, e in effetti a) usano un latino Oh, non un greco Omikron, b) entrambi usano la parola "Ordnung", e c) Landau afferma esplicitamente che significa "Ordnung" . Sono corretto.
Jörg W Mittag,

Quale parola migliore potrebbe essere trovata? Voglio dire, da un tedesco? Ordnung ist das halbe Leben!
JensG,

Penso che la prima frase della tua risposta (corretta, votata, fantastica) dovrebbe essere la seguente: "O sta per" Ordnung "(tedesco che significa" Ordine ")". Aiuterebbe questa risposta ad attirare l'attenzione di altri lettori.
Hawkeye Parker,

5

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.


5
Il semplice collegamento di un articolo non è eccessivamente utile. Di solito è una buona idea parafrasare o citare la sezione che trovi particolarmente rilevante per il thread.
Demian Brecht,

3
I voti negativi sono davvero necessari? L'articolo che ha collegato è molto pertinente e l'IMHO è piuttosto utile. Nel frattempo, la risposta più votata è un collegamento a un articolo di Wikipedia. +1 per compensare l'ipocrisia dell'alveare.
Brandon Moretz,

1
-1, perché l'artice, pur essendo un articolo molto carino e ben scritto, non ha nulla a che fare con la domanda.
Jörg W Mittag,

@Jorg, non ho mai detto che l'articolo avrebbe risolto il problema, ma l'ho condiviso perché l'avevo trovato utile quando guardavo questi concetti.
topgun_ivard,

3
@topgun_ivard: quindi cosa succede se si trasforma in un link non funzionante? La parafrasi consente a 1) il pubblico di questa discussione di ottenere una versione di Coles notes del tuo link (il tempo è denaro) e 2) assicura che il tuo post non sia reso irrilevante su un link morto.
Demian Brecht,

2

"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


2

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 :

  • Omicron ha le lettere MICRO al suo interno e la semantica del simbolo Omicron significa approssimativamente "più piccolo di"
  • Omega contiene le lettere MEGA e la semantica del simbolo Omega significa approssimativamente "più grande di"
  • Theta (Θ) assomiglia un po 'a un segno di uguale e la semantica del simbolo Theta significa approssimativamente "uguale a"

Questo è tutto. Non ha alcun significato reale, è solo un gioco di parole, se vuoi, per aiutarti a ricordare più facilmente la semantica.


2
Anche se mi piacerebbe credere alla tua proposta mnemonica (è un'idea davvero interessante), avrò bisogno di vedere alcune prove che questa è l'intenzione originale attuale di Bachmann. Forniscilo e ti farò +1.
Jonathan Henson,

2
@Jonathan Henson: Apparentemente, sono stato ingannato dal Prof. Knuth :-)
Jörg W Mittag

-5

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 :)


2
-1 perché questo è semplicemente errato e ha risposto a una domanda separata da quella che è stata posta. La domanda era: perché viene usata la lettera "O", non "come funziona la notazione Big O?". Non sei corretto su come funziona Big-oh anche se ... il looping di un array è O (n) dove n è la dimensione dell'array, non O (1). La notazione non ha nulla a che fare con i "cicli" di un algoritmo ... è una misurazione del limite superiore del tempo di esecuzione di un algoritmo.
Casey Patton,

Non discutere con te qui, ma è quello che volevo dire. Cosa significa runtime? Bene, il tempo di esecuzione è determinato da ciò che deve essere elaborato sulla macchina. Immagino di usare questo ciclo liberamente qui. Per ciclo immagino che avrei dovuto dire iterate-through o qualcosa del genere. Hai ragione sul limite superiore, tuttavia, non determina la media. Pertanto accetto il downgrade.
SoftwareSantant
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.