È Big O (logn) log in base e?


96

Per il tipo di albero di ricerca binario delle strutture dati, vedo che la notazione Big O è tipicamente indicata come O (logn). Con una 'l' minuscola in log, questo implica logaritmo in base e (n) come descritto dal logaritmo naturale? Scusa per la semplice domanda, ma ho sempre avuto problemi a distinguere i diversi logaritmi impliciti.


58
Come altri hanno sottolineato in modo convincente, non importa. Tutti i logaritmi differiscono l'uno dall'altro per una costante dipendente solo dalle basi coinvolte. Poiché questi fattori sono costanti, sono irrilevanti ai fini dell'analisi asintotica. In secondo luogo, per quanto riguarda la determinazione della base implicita, dipende dal contesto. Come regola pratica, usa quanto segue: 1. Quando un matematico scrive log n, intende il logaritmo naturale. 2. Quando un informatico scrive log n, intende la base due. 3. Quando un ingegnere scrive log n, intende in base dieci. Di solito sono vere.
jason

4
@ Jason, un'altra convenzione (all'interno della matematica) è che ln n significa il logaritmo naturale e log n è in base dieci. Credo che ln stia per "logaritmo naturale" francese.
Internet man

2
La base del logaritmo è il numero di figli di ogni nodo. Se è un albero binario, allora è un registro in base 2.
Paul

3
Apprezzo la tua risposta, Jason, ed ecco qualcosa a cui pensare. Dopo aver ricercato in quale base si trova il log (ho ipotizzato 2), ho visto la stessa risposta: che non importa perché puoi eliminare la costante, log_10 (2). Il mio problema con questo è che, ad esempio: 5 log_10 (5) <5 mentre 5 log_2 (5)> 5. Li ho inseriti rapidamente nel mio calcolo per aiutare a concettualizzare dove O (n logn) ha un tempo di esecuzione migliore o peggiore di O (n). A seconda della base è importante. Pertanto, penso davvero che la risposta GIUSTA a questo dovrebbe essere che log contestualmente significa base 2 nella maggior parte delle applicazioni informatiche.
Doug Mead il

@jason, direi che è più facile usare ln (interpretazione del matematico);). Gli altri due esempi sono ragionevoli.
belford

Risposte:


77

Una volta espressi in notazione O grande (), entrambi sono corretti. Tuttavia, durante la derivazione del polinomio O (), nel caso della ricerca binaria , solo il log 2 è corretto. Presumo che questa distinzione sia stata l'ispirazione intuitiva con cui iniziare la tua domanda.

Inoltre, secondo me, scrivere O (log 2 N) è meglio per il tuo esempio, perché comunica meglio la derivazione del tempo di esecuzione dell'algoritmo.

Nella notazione O grande (), i fattori costanti vengono rimossi. La conversione da una base logaritmica a un'altra implica la moltiplicazione per un fattore costante.

Quindi O (log N) è equivalente a O (log 2 N) a causa di un fattore costante.

Tuttavia, se puoi facilmente comporre il log 2 N nella tua risposta, farlo è più pedagogico. Nel caso della ricerca in albero binario, hai ragione che il log 2 N viene introdotto durante la derivazione del runtime big-O ().

Prima di esprimere il risultato come notazione O grande (), la differenza è molto importante. Quando si ricava il polinomio da comunicare tramite la notazione O grande, non sarebbe corretto per questo esempio usare un logaritmo diverso dal log 2 N, prima di applicare la notazione O (). Non appena il polinomio viene utilizzato per comunicare un runtime nel caso peggiore tramite la notazione big-O (), non importa quale logaritmo viene utilizzato.


4
Ma è molto facile mostrare che log_2 nè Θ(log_a n)adatto a qualsiasi base a, quindi non sono sicuro di vedere come l'utilizzo della base 2 sia "più corretto".
bcat

1
Kinopkio e bcat, grazie per averlo aiutato a diventare utile. All'inizio non era scritto molto bene. :)
Heath Hunnicutt

2
Beh, ho aggiunto chiarezza, ma sono certo che mi fa male che pensi che la mia risposta possa confondere le persone. In realtà, la maggior parte delle risposte qui non considerava l'intuizione dell'OP e cercava di insegnargli molto. Non sono molto entusiasta della concorrenza, sono piuttosto triste per la pedagogia bassa.
Heath Hunnicutt

11
"durante la derivazione del polinomio O (), nel caso della ricerca binaria, solo log2 è corretto." -1 per matematica scadente. La definizione di x (n) ~ O (f (n)) dice che esiste una costante c tale che c * (f (n)) <x (n) per ogni n> n_0. Pertanto il coefficiente costante è completamente irrilevante durante l'analisi.
rlbond

3
Poiché log2 (x) è uguale a log10 (x) / log10 (2), puoi derivarlo in entrambi i casi. Il registro non è strettamente in base 2 in alcun punto.
rlbond

80

La notazione Big O non è influenzata dalla base logaritmica, perché tutti i logaritmi in basi diverse sono correlati da un fattore costante , O(ln n)è equivalente a O(log n).

inserisci qui la descrizione dell'immagine


2
la grafica è pulita ma si pensi alla derivazione del polinomio O () ... prima di applicare O (), solo log-base-2 è corretto per la ricerca binaria.
Heath Hunnicutt

1
@ Heath Hunnicutt: No. log_2 xdifferisce log_b xda un fattore costante c(b)per qualsiasi base bindipendente da x.
jason

4
Ma perché ne parli, quando non ha alcuna relazione con la domanda e serve solo a confondere?
hobbs

4
hobbs: Perché questo è il motivo per cui l'OP è stato ispirato a indagare. Sto cercando di collegare le sue idee con la risposta, quindi capisce perché ha avuto la sua intuizione, perché non si applica a O (), ma non per applicare eccessivamente ciò che apprende qui alla parte di derivazione dell'analisi. Le risposte concise che non affrontano la causa principale del malinteso possono portare a ulteriori incomprensioni. È una cattiva pedagogia.
Heath Hunnicutt

4
@ Heath Hunnicutt: Se stai facendo un'analisi asintotica, non importa. Il fatto che tu aspetti fino all'ultimo minuto per inserire alcuni O grandi non cambia il fatto che posso moltiplicare e dividere tutti i miei logaritmi per qualche stupida costante e cambiare la base a tutti i passaggi. Cioè, se ho qualche analisi che coinvolge log_2 n, posso semplicemente entrare e sostituire log_2 novunque log_pi 2 * log_2 n / log_pi 2e poi finire con un'analisi che ha log_pi 2 * log_pi novunque. Ora la mia analisi è in termini di log_pi n.
jason

9

Non importa quale sia la base, dal momento che la notazione O grande viene solitamente scritta mostrando solo l'ordine asintoticamente più alto di n, quindi i coefficienti costanti cadranno. Poiché una base logaritmica diversa è equivalente a un coefficiente costante, è superfluo.

Detto questo, presumo probabilmente logaritmo in base 2.


@Kinopiko: cosa c'è che non va esattamente? Più precisamente, in che modo la mia risposta è effettivamente diversa dalla tua e da altre qui?
Daniel Pryden

Ah, forse il mio errore nell'uso del "coefficiente". Modificherò per chiarire.
Daniel Pryden

Questo è stato il mio problema principale con la tua risposta. Inoltre, non è chiaro cosa intendi per "avranno ancora qualche effetto". Qualche effetto su cosa?
bcat

1
La tua risposta discute i coefficienti di ordine più elevato. Quello che hai detto è corretto per quanto riguarda, ma non è questo il motivo per cui la base del logaritmo è irrilevante. Il motivo è che la differenza tra diversi logaritmi di base è una costante che viene assorbita da O ().

1
@Kinopiko: OK. Penso che stiamo dicendo la stessa cosa. Direi O (100) = O (1) perché O (100) = O (100 * 1) = O (C * 1) = O (1). Che è ciò che intendevo con espressioni costanti superflue. Cioè, l' ordine di qualsiasi costante è 1.
Daniel Pryden

7

Sono corretti entrambi. Pensaci

log2(n)=log(n)/log(2)=O(log(n))
log10(n)=log(n)/log(10)=O(log(n))
logE(n)=log(n)/log(E)=O(log(n))

2

Sì, quando si parla di notazione O grande, la base non ha importanza. Tuttavia, dal punto di vista computazionale di fronte a un vero problema di ricerca è importante.

Quando si sviluppa un'intuizione sulle strutture ad albero, è utile capire che un albero di ricerca binario può essere cercato in tempo O (n log n) perché quella è l'altezza dell'albero, cioè in un albero binario con n nodi, l'albero la profondità è O (n log n) (base 2). Se ogni nodo ha tre figli, l'albero può ancora essere cercato in tempo O (n log n), ma con un logaritmo in base 3. A livello computazionale, il numero di figli di ciascun nodo può avere un grande impatto sulle prestazioni (vedere ad esempio: testo del collegamento )

Godere!

Paolo


volevi dire che l'altezza di un albero binario è log n, non n log n, giusto?
cella

1

Tecnicamente la base non ha importanza, ma generalmente puoi pensarla come base 2.


1

Per prima cosa devi capire cosa significa per una funzione f (n) essere O (g (n)).

La definizione formale è: * Una funzione f (n) è detta O (g (n)) iff | f (n) | <= C * | g (n) | ogni volta che n> k, dove C e k sono costanti. *

quindi sia f (n) = logaritmo in base a di n, dove a> 1 eg (n) = logaritmo in base b di n, dove b> 1

NOTA: Ciò significa che i valori aeb potrebbero essere qualsiasi valore maggiore di 1, ad esempio a = 100 eb = 3

Ora otteniamo quanto segue: log in base a di n si dice O (logaritmo in base b di n) iff | log in base a di n | <= C * | logaritmo in base b di n | ogni volta che n> k

Scegli k = 0 e C = logaritmo in base a di b.

Ora la nostra equazione è la seguente: | logaritmo in base a di n | <= logaritmo in base a di b * | logaritmo in base b di n | ogni volta che n> 0

Notare il lato destro, possiamo manipolare l'equazione: = logaritmo in base a di b * | logaritmo in base b di n | = | logaritmo in base b di n | * logaritmo in base a di b = | logaritmo in base a di b ^ (logaritmo in base b di n) | = | logaritmo in base a di n |

Ora la nostra equazione è la seguente: | logaritmo in base a di n | <= | logaritmo in base a di n | ogni volta che n> 0

L'equazione è sempre vera indipendentemente da quali siano i valori n, b o a, oltre alle loro restrizioni a, b> 1 e n> 0. Quindi la base logaritmica a di n è O (base logaritmica b di n) e poiché a, b non ha importanza possiamo semplicemente ometterli.

Puoi vedere un video di YouTube su di esso qui: https://www.youtube.com/watch?v=MY-VCrQCaVw

Puoi leggere un articolo su di esso qui: https://medium.com/@randerson112358/omitting-bases-in-logs-in-big-o-a619a46740ca

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.