Warum ist das Protokoll im Big-O der binären Suche nicht Basis 2?

35

Ich bin neu im Verständnis von Algorithmen der Informatik. Ich verstehe den Prozess der binären Suche, habe aber ein leichtes Missverständnis mit der Effizienz.

Bei einer Größe von Elementen würde es im Durchschnitt Schritte dauern, um ein bestimmtes Element zu finden. Nimmt man den Logarithmus zur Basis 2 beider Seiten, so ergibt sich . Wäre die durchschnittliche Anzahl der Schritte für den binären Suchalgorithmus also nicht ?s=2nnLog2(s)=nLog2(s)

Dieser Wikipedia-Artikel über den binären Suchalgorithmus besagt, dass die durchschnittliche Leistung . Warum ist das so? Warum ist diese Nummer nicht ?O(Logn)Log2(n)

DrPepper
quelle
2
Auf SO duplizieren - Ist Big O (logn) log base e?
Dukeling

Antworten:

86

Wenn Sie die Basis des Logarithmus ändern, unterscheidet sich der resultierende Ausdruck nur durch einen konstanten Faktor, der per Definition der Big-O-Notation impliziert, dass beide Funktionen hinsichtlich ihres asymptotischen Verhaltens derselben Klasse angehören.

Zum Beispiel wobei .C=1

Log10n=Log2nLog210=CLog2n
C=1Log210

So und unterscheidet sich durch eine Konstante , und somit beide erfüllt sind: Im allgemeinen ist für positive ganze Zahlen und größer als 1 ist .log 2 n C log 10 n  ist  O ( log 2 n ) log 2 n  ist  O ( log 10 n ) log a n O ( log b n ) a bLog10nLog2nC

Log10n ist O(Log2n)
Log2n ist O(Log10n)
LogeinnO(Logbn)einb

Eine weitere interessante Tatsache mit logarithmischer Funktionen ist , dass , während für konstante , ist nicht , aber ist seit unterscheidet sich von nur durch den konstanten Faktor .n k O ( n ) log n k O ( log n ) log n k = k log n log n kk>1nkO(n)LognkO(Logn)Lognk=kLognLognk

fade2black
quelle
Nicht nur für positive ganze Zahlen: Für alle reellen , zB . eein,b>1e
nbubis
2
Ich würde hinzufügen, dass dies der Grund ist, warum bei der Big-O-Notation die Basis des Logarithmus üblicherweise nicht spezifiziert wird. Dies bedeutet auch, dass es keine Verwirrung darüber gibt, welche Basis verwendet: Es kann eine der allgemein verwendeten sein, da es keinen Unterschied macht. O(Logn)
Svick
9

Zusätzlich zu der Antwort von fade2black (die völlig korrekt ist) ist anzumerken, dass die Notation " " mehrdeutig ist. Die Basis ist nicht wirklich angegeben und die Standardbasis ändert sich basierend auf dem Kontext. In der reinen Mathematik wird die Basis fast immer als (sofern nicht anders angegeben), während es in bestimmten technischen Zusammenhängen 10 sein können. In der Informatik ist die Basis 2 so allgegenwärtig, dass häufig als Basis 2 angenommen wird Artikel sagt nie etwas über die Basis.e logLog(n)eLog

Aber wie bereits gezeigt wurde, spielt es in diesem Fall keine Rolle.

MattPutnam
quelle
7
Dann ist es wahrscheinlich noch erwähnenswert, dass, während "log (n)" nicht eindeutig ist, "O (log (n))" nicht, weil letzteres nur eine Bedeutung hat, unabhängig davon, an welche Basis Sie denken.
Chris