Für Datenstrukturen vom Typ binärer Suchbaum wird die Big-O-Notation üblicherweise als O(logn) angegeben. Bedeutet ein klein geschriebenes "l" in log, dass es sich um die logarithmische Basis e (n) handelt, wie sie der natürliche Logarithmus beschreibt? Entschuldigen Sie die einfache Frage, aber ich hatte schon immer Schwierigkeiten, zwischen den verschiedenen impliziten Logarithmen zu unterscheiden.
Antworten
Zu viele Anzeigen?In der big-O()-Notation ausgedrückt, sind beide korrekt. Allerdings muss während der Ableitung des O()-Polynoms, im Fall von バイナリ Suche, nur Protokoll 2 korrekt ist. Ich nehme an, dass diese Unterscheidung die intuitive Inspiration für Ihre Frage war.
Außerdem bin ich der Meinung, dass das Schreiben von O(log 2 N) ist für Ihr Beispiel besser geeignet, weil es die Ableitung der Laufzeit des Algorithmus besser vermittelt.
In der big-O()-Notation werden die konstanten Faktoren entfernt. Die Umrechnung von einer Logarithmusbasis in eine andere erfolgt durch Multiplikation mit einem konstanten Faktor.
O(log N) ist also äquivalent zu O(log 2 N) aufgrund eines konstanten Faktors.
Wenn Sie jedoch das Logbuch leicht abtippen können 2 N in Ihrer Antwort, das ist eher pädagogisch. Im Falle der binären Baumsuche ist es richtig, dass log 2 N wird bei der Ableitung der big-O()-Laufzeit eingeführt.
Bevor das Ergebnis in big-O()-Notation ausgedrückt wird, ist der Unterschied sehr wichtig. Bei der Ableitung des Polynoms, das über die big-O-Notation mitgeteilt werden soll, wäre es für dieses Beispiel falsch, einen anderen Logarithmus als log 2 N, vor der Anwendung der O()-Notation. Sobald das Polynom verwendet wird, um eine Worst-Case-Laufzeit über die big-O()-Notation zu kommunizieren, spielt es keine Rolle mehr, welcher Logarithmus verwendet wird.
Die Big-O-Notation ist unabhängig von der logarithmischen Basis, da alle Logarithmen in verschiedenen Basen verbunden durch einen konstanten Faktor , O(ln n)
ist gleichbedeutend mit O(log n)
.
Es ist eigentlich egal, welche Basis es ist, da die Big-O-Notation normalerweise nur die asymptotisch höchste Ordnung von n
, so dass konstante Koeffizienten wegfallen. Da eine andere Logarithmusbasis mit einem konstanten Koeffizienten gleichzusetzen ist, ist sie überflüssig.
Allerdings würde ich wahrscheinlich von der Log Base 2 ausgehen.
Ja, wenn es um die Big-O-Notation geht, spielt die Basis keine Rolle. Bei einem echten Suchproblem spielt sie jedoch eine Rolle.
Um ein Gefühl für Baumstrukturen zu entwickeln, ist es hilfreich zu verstehen, dass ein binärer Suchbaum in O(n log n) Zeit durchsucht werden kann, da dies die Höhe des Baums ist - d. h. in einem binären Baum mit n Knoten ist die Baumtiefe O(n log n) (Basis 2). Wenn jeder Knoten drei Kinder hat, kann der Baum immer noch in O(n log n) Zeit durchsucht werden, aber mit einem Logarithmus zur Basis 3. Aus rechnerischer Sicht kann die Anzahl der Kinder jedes Knotens einen großen Einfluss auf die Leistung haben (siehe zum Beispiel: Linktext )
Viel Spaß!
Paul
- See previous answers
- Weitere Antworten anzeigen
70 Stimmen
Wie andere bereits treffend dargelegt haben, spielt das keine Rolle. Alle Logarithmen unterscheiden sich voneinander durch eine Konstante, die nur von den beteiligten Basen abhängt. Da diese Faktoren Konstanten sind, sind sie für die Zwecke der asymptotischen Analyse irrelevant. Zweitens: Die Bestimmung der impliziten Basis hängt vom Kontext ab. Als grobe Faustregel kann man folgendes verwenden: 1. Wenn ein Mathematiker schreibt
log n
er meint den natürlichen Logarithmus. 2. Wenn ein Informatiker schreibtlog n
er meint Basis zwei. 3. Wenn ein Ingenieur schreibtlog n
er meint base-ten. Diese sind in der Regel richtig.5 Stimmen
@Jason, eine andere Konvention (innerhalb der Mathematik) ist, dass ln n den natürlichen Logarithmus bedeutet und log n die Basis zehn ist. Ich denke, ln steht für den französischen "logarithm naturelle".
2 Stimmen
Die Basis des Logarithmus ist die Anzahl der Kinder, die jeder Knoten hat. Wenn es sich um einen binären Baum handelt, ist es ein Logarithmus zur Basis 2.
3 Stimmen
Ich danke dir für deine Antwort, Jason, und hier ist etwas, worüber ich nachdenken sollte. Als ich recherchiert habe, in welcher Basis der Logarithmus ist (ich nahm 2 an), habe ich die gleiche Antwort gesehen: dass es keine Rolle spielt, weil man die Konstante, log_10(2), eliminieren kann. Mein Problem dabei ist, dass zum Beispiel: 5 log_10(5) < 5, wohingegen 5 log_2(5) > 5 ist. Ich habe dies schnell in meine Berechnung eingegeben, um zu verstehen, wo O(n logn) eine bessere oder schlechtere Laufzeit als O(n) hat. Abhängig von der Basis macht es einen Unterschied. Daher denke ich wirklich, dass die RICHTIGE Antwort darauf sein sollte, dass log in den meisten Informatik-Anwendungen kontextuell zur Basis 2 bedeutet.
0 Stimmen
@jason, ich würde sagen, dass es einfacher ist, ln zu verwenden (die mathematische Interpretation) ;). Die anderen beiden Beispiele sind vernünftig.
0 Stimmen
@DougMead 5 ist ein kleiner Wert. Komplexitäten sind immer für n > c(irgendeine Konstante) definiert. Setzen Sie also einen ausreichend großen Wert ein und prüfen Sie. In Ihrem Fall werden Sie immer sehen, dass O(nlog_c n) > O(n) für alle n > c. Jetzt können Sie entscheiden, was die Basis ist und diese Gleichung wird immer wahr sein :)
0 Stimmen
Ahhhh, ich hatte gehofft, niemand würde meinen Kommentar bemerken :P Das habe ich kurz danach herausgefunden, aber danke, dass du mir 11 Monate später eine verdiente Blamage bereitet hast, hahaha
0 Stimmen
Die asymptotische Notation soll nur obere und untere Schranken darstellen, nicht die genaue Anzahl der Berechnungen. Wie wäre es mit etwas mehr als 2 Jahren später? :D