Ich verstehe, dass schneller als Θ ( n log n ) und langsamer als Θ ( n / log n ) ist . Was schwierig ist , ist für mich zu verstehen , wie eigentlich vergleichen Θ ( n log n ) und Θ ( n / log n ) mit Θ ( n f ) wobei .
Wie entscheiden wir uns beispielsweise für vs. oder
Ich hätte gerne eine Anleitung, wie ich in solchen Fällen vorgehen soll. Vielen Dank.
ist die Inverse von 2 n . So wie 2 n schneller wächst als jedes Polynom n k, unabhängig davon, wie groß ein endliches k ist,wächst log n langsamer als alle Polynomfunktionen n k, unabhängig davon, wie klein ein positives k ungleich Nullist.Logn 2n 2n nk k Logn nk k
gegen n k , für k < 1 ist identisch mit: n / log n gegen n / n 1 - kn / logn nk k < 1 n / logn n / n1 - k
als für großes n , n / log n > n k für k < 1 und großes n .n1 - k> logn n n / logn > nk k < 1 n
quelle
Bei vielen Algorithmen kommt es manchmal vor, dass die Konstanten unterschiedlich sind, was dazu führt, dass die eine oder andere Konstante bei kleineren Datengrößen schneller oder langsamer ist und nach algorithmischer Komplexität nicht so geordnet ist.
Davon abgesehen, wenn wir nur die sehr großen Datenmengen berücksichtigen , d.h. was man schließlich gewinnt, ist dann
O(n^f)
schneller alsO(n/log n)
für0 < f < 1
.Ein großer Teil der algorithmischen Komplexität besteht darin, zu bestimmen, welcher Algorithmus letztendlich schneller ist. Daher reicht es oft aus , zu wissen, dass dieser Algorithmus schneller
O(n^f)
ist alsO(n/log n)
for0 < f < 1
.Eine allgemeine Regel ist , daß die Multiplikation (oder dividiert) durch
log n
schließlich vernachlässigbar sein im Vergleich zu multiplizieren (oder Aufteilen) durchn^f
für jedenf > 0
.Um dies deutlicher zu zeigen, betrachten wir, was passiert, wenn n zunimmt.
Beachten Sie, was schneller abnimmt? Es ist die
n^f
Säule.Selbst wenn
f
näher an 1 liegt,n^f
startet die Spalte nur langsamer, aber wenn sich n verdoppelt, beschleunigt sich die Änderungsrate des Nenners, während sich der Nenner dern/log n
Spalte mit einer konstanten Rate zu ändern scheint.Lassen Sie uns einen bestimmten Fall in einem Diagramm darstellen
Quelle: Wolfram Alpha
Ich habe so gewählt
O(n^k)
, dassk
es ziemlich nahe an 1 (at0.9
) liegt. Ich habe auch die Konstanten so gewählt, dass sie anfangsO(n^k)
langsamer sind. Beachten Sie jedoch, dass es letztendlich "gewinnt" und weniger Zeit in Anspruch nimmt alsO(n/log n)
.quelle
n^k
möglicherweise schneller ist, auch wenn Konstanten so ausgewählt sind, dass sie anfänglich langsamer sind.quelle
Beim Vergleich von Laufzeiten ist es immer hilfreich, sie mit großen Werten von n zu vergleichen. Für mich hilft dies dabei, die Intuition darüber aufzubauen, welche Funktion langsamer ist
Denken Sie in Ihrem Fall an n = 10 ^ 10 und a = .5
Daher ist O (n ^ a) schneller als O (n / logn). Wenn 0 <a <1 ist, habe ich nur einen Wert verwendet. Sie können jedoch mehrere Werte verwenden, um eine Intuition über die Funktion zu erhalten
quelle
O(10^9)
, aber der Hauptpunkt beim Versuch, mit Zahlen eine Intuition aufzubauen, ist richtig.Angewandt auf Ihr Beispiel:
Man könnte sagen: Potenzen von n dominieren die Potenzen von log, die die Potenzen von log log dominieren.
Quelle: Konkrete Mathematik, S. 441
quelle