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?Zunächst müssen Sie verstehen, was es bedeutet, dass eine Funktion f(n) O( g(n) ) ist.
Die formale Definition lautet: *Eine Funktion f(n) heißt O(g(n)), wenn |f(n)| <= C * |g(n)| immer dann, wenn n > k ist, wobei C und k Konstanten sind.
f(n) = logarithmische Basis a von n, wobei a > 1 und g(n) = logarithmische Basis b von n, wobei b > 1
HINWEIS: Das bedeutet, dass die Werte a und b einen beliebigen Wert größer als 1 haben können, z. B. a = 100 und b = 3
Nun erhalten wir folgendes: log base a von n heißt O(log base b von n), wenn |log base a von n| <= C * |log base b von n| immer dann, wenn n > k
Wählen Sie k=0, und C= log Basis a von b.
Unsere Gleichung sieht nun wie folgt aus: |log Basis a von n| <= log Basis a von b * |log Basis b von n| immer wenn n > 0
Beachten Sie die rechte Seite, wir können die Gleichung manipulieren: = log base a von b * |log base b von n| = |log base b von n| * log base a von b = |log base a von b^(log base b von n)| = |log base a von n|
Unsere Gleichung sieht nun wie folgt aus: |log Basis a von n| <= |log Basis a von n| immer wenn n > 0
Die Gleichung ist immer wahr, unabhängig von den Werten n, b oder a, mit Ausnahme der Einschränkungen a, b>1 und n>0. Die logarithmische Basis a von n ist also O(logarithmische Basis b von n) und da a,b keine Rolle spielt, können wir sie einfach weglassen.
Hier können Sie ein YouTube-Video dazu sehen: https://www.youtube.com/watch?v=MY-VCrQCaVw
Einen Artikel darüber können Sie hier lesen: https://medium.com/@randerson112358/omitting-bases-in-logs-in-big-o-a619a46740ca
- 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