Perché il registro nel big-O della ricerca binaria non è base 2?


35

Sono nuovo a comprendere gli algoritmi di informatica. Capisco il processo della ricerca binaria, ma sto riscontrando un leggero fraintendimento con la sua efficienza.

In una dimensione di elementi, sarebbero necessari, in media, n passaggi per trovare un elemento particolare. Prendendo il logaritmo di base 2 di entrambi i lati si ottengono i log 2 ( s ) = n . Quindi il numero medio di passaggi per l'algoritmo di ricerca binaria non sarebbe log 2 ( s ) ?s=2nnlog2(s)=nlog2(s)

Questo articolo di Wikipedia sull'algoritmo di ricerca binaria afferma che la prestazione media è . Perché è così? Perché questo numero log 2 ( n ) non è ?O(logn)log2(n)


Risposte:


86

Quando si cambia la base del logaritmo, l'espressione risultante differisce solo per un fattore costante che, per definizione della notazione Big-O , implica che entrambe le funzioni appartengono alla stessa classe rispetto al loro comportamento asintotico.

Ad esempio dove C=1

log10n=log2nlog210=Clog2n
.C=1log210

log10nlog2nC

log10n is O(log2n)
log2n is O(log10n)
loganO(logbn)ab

k>1nkO(n)lognkO(logn)lognk=klogn which differs from logn by only constant factor k.


Not only for positive integers: For all real a,b>1, e.g. e.
nbubis

2
I would add that this is the reason why with big-O notation, the base of the logarithm is commonly not specified. It also means there is no confusion about which base O(logn) uses: it can be any of the commonly used based, since it doesn't make a difference.
svick

9

In addition to fade2black's answer (which is completely correct), it's worth noting that the notation "log(n)" is ambiguous. The base isn't actually specified, and the default base changes based on context. In pure mathematics, the base is almost always assumed to be e (unless specified), while in certain engineering contexts it might be 10. In computer science, base 2 is so ubiquitous that log is frequently assumed to be base 2. That wikipedia article never says anything about the base.

But, as has already been shown, in this case it doesn't end up mattering.


7
It is probably further worth noting then that while "log(n)" might be ambiguous that "O(log(n))" is not because the latter only has one meaning, no matter what base you might be thinking of.
Chris
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.