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)

gnasher729
quelle
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.

Yuval Filmus
quelle
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)

Oh mein Gott
quelle
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.

templatetypedef
quelle