Zeitliche Komplexität eines Algorithmus: Ist es wichtig, die Basis des Logarithmus anzugeben?


Antworten:


63

Es kommt darauf an, wo der Logarithmus ist. Wenn es sich nur um einen Faktor handelt, macht es keinen Unterschied, denn mit big-O oder können Sie mit jeder Konstanten multiplizieren.θ

Wenn Sie ist die Basis wichtig. In Basis 2 hätten Sie nur , in Basis 10 geht es um .O(2logn)O(n)O(n0.3010)


5
Ich denke, das wird nur zu so etwas wie . Ich kann keinen Grund dafür sehen, eine Zahl als auszudrücken, anstatt als -für-alles-was-es-ist (außer vielleicht als Zwischenstufe einer Berechnung). 2clogbnn2logn2clogbnn
David Richerby

7
+1 für "Konstante Faktoren spielen in Exponenten eine Rolle"
Wahrsager

50

Da in der asymptotischen Notation konstante Faktoren nicht berücksichtigt werden und zwei beliebige Logarithmen sich um einen konstanten Faktor unterscheiden, macht die Basis keinen Unterschied: logan=Θ(logbn) für alle a,b>1 . Es ist also nicht erforderlich, die Basis eines Logarithmus anzugeben, wenn die asymptotische Notation verwendet wird.


13
Ich ziehe es vor, anstelle von ==
Nayuki

16
Ich fürchte, die Standardnotation verwendet . =
Yuval Filmus

4
@YuvalFilmus Die Standardnotation ist irreführend, unterscheidet sich völlig vom Standard und lässt die algorithmische Komplexität von ähnlichen Dingen völlig fremd erscheinen. "Es ist die Standardnotation" sollte niemals ein Grund sein, eine schlechte Lösung einer besseren, ähnlich klaren vorzuziehen. (Die Bedeutung des Symbols ergibt sich normalerweise ohnehin aus dem Kontext.)
wizzwizz4

7
@ wizzwizz4 Die gängige Praxis ist ein hervorragender Grund. Es fördert eine effiziente Kommunikation. Das ist der Grund, warum wir uns alle mit den Macken der englischen Rechtschreibung abfinden.
Yuval Filmus

3
nloganΘ(nlogbn)logan=Θ(logbn)

15

logxy=1logyxLogxy=LogzyLogzxLogeinnLogbn=LognbLognein=LogeinbLogeinbein,b>1Logeinn=Θ(Logbn)


8

In den meisten Fällen ist es sicher, die Basis des Logarithmus zu löschen, da, wie andere Antworten gezeigt haben, die Formel zur Änderung der Basis für Logarithmen bedeutet, dass alle Logarithmen konstante Vielfache voneinander sind.

Es gibt einige Fälle, in denen dies nicht sicher ist. Zum Beispiel hat @ gnasher729 darauf hingewiesen, dass die logarithmische Basis in der Tat signifikant ist, wenn Sie einen Logarithmus in einem Exponenten haben.

bbΘ(n+b)LogbUUO((n+b)LogbU)bO(nLogU)bb=nO(n+LognU)LognULogULognO(nLogULogn)Logm/2+2

bbΘ(Logbn)b

Zusammenfassend können Sie in Fällen, in denen Sie einen Logarithmus mit einer konstanten Basis haben, normalerweise (vorbehaltlich von Ausnahmen wie @ gnasher729) die Basis des Logarithmus fallen lassen. Wenn die Basis des Logarithmus jedoch von bestimmten Parametern des Algorithmus abhängt, ist dies normalerweise nicht sicher.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.