Ressourcen, die ich zur Zeitkomplexität gefunden habe, sind unklar, wann es in Ordnung ist, Begriffe in einer Zeitkomplexitätsgleichung zu ignorieren, insbesondere bei nichtpolynomiellen Beispielen.
Mir ist klar, dass bei etwas in der Form n 2 + n + 1 die letzten beiden Begriffe unbedeutend sind.
Ist bei zwei Kategorisierungen, 2 n und n * (2 n ), die zweite in derselben Reihenfolge wie die erste? Ist die zusätzliche n-Multiplikation dort wichtig? Normalerweise sagen Ressourcen einfach, dass x n exponentiell ist und viel schneller wächst ... dann fahren Sie fort.
Ich kann verstehen, warum dies nicht der Fall ist, da 2 n n deutlich übertreffen wird, aber da sie nicht addiert werden, wäre es beim Vergleich der beiden Gleichungen von großer Bedeutung. Tatsächlich wird der Unterschied zwischen ihnen immer ein Faktor von n sein. das scheint gelinde gesagt wichtig zu sein.
n! = o((n+1)!)
heißt, es wächst asymptotisch streng langsamer.Antworten:
Sie müssen zur formalen Definition des großen O (
O
) gehen, um diese Frage zu beantworten.Die Definition ist, dass genau dann zu
f(x)
gehört,O(g(x))
wenn die Grenze existiert, dh nicht unendlich ist. Kurz gesagt bedeutet dies, dass es eine Konstante gibt , so dass der Wert von niemals größer als ist .limsupx → ∞ (f(x)/g(x))
M
f(x)/g(x)
M
Im Falle Ihrer Frage lassen und lassen . Dann wird das noch unendlich wachsen. Daher gehört nicht dazu .
f(n) = n ⋅ 2n
g(n) = 2n
f(n)/g(n)
n
f(n)
O(g(n))
quelle
O(f(x)/g(x))
; Die Big-O-Benachrichtigung ist eine Abkürzung für eine Reihe von Funktionen, nicht für eine einzelne Funktion, deren Wert Sie einschränken können. Ich denke jedoch, dass es wahr ist, dass Sie das zeigen können,f(x) = O(g(x))
wenn eslim(x->infinity) f(x)/g(x)
existiert.lim sup
stattlim
.x
, nicht für alle Werte vonx
.Ein schneller Weg, um zu sehen, dass
n⋅2ⁿ
größer ist, besteht darin, eine Änderung der Variablen vorzunehmen. Lassm = 2ⁿ
. Dannn⋅2ⁿ = ( log₂m )⋅m
(nehmen Sie den Basis-2-Logarithmus auf beiden Seiten vonm = 2ⁿ
gibtn = log₂m
), und Sie können leicht zeigen, dassm log₂m
schneller wächst alsm
.quelle
lg
? Logarithmus in Basis 2?lg
die ISO-Notation für einen Basis-10-Logarithmus ist und nicht die basenunabhängige Verwendung, die am häufigsten bei der Erörterung asymptotischer Laufzeiten verwendet wird. Siehe en.wikipedia.org/wiki/Logarithm#Particular_basesIch bin damit einverstanden, dass dies
n⋅2ⁿ
nicht derO(2ⁿ)
Fall ist , aber ich dachte, es sollte expliziter sein, da das Limit der überlegenen Nutzung nicht immer gilt.Nach der formalen Definition von Big-O:
f(n)
ist in,O(g(n))
wenn es Konstanten gibtc > 0
undn₀ ≥ 0
solche, die für alles, wasn ≥ n₀
wir habenf(n) ≤ c⋅g(n)
. Es kann leicht gezeigt werden, dass fürf(n) = n⋅2ⁿ
und keine solchen Konstanten existiereng(n) = 2ⁿ
. Es kann jedoch gezeigt werden, dassg(n)
inO(f(n))
.Mit anderen Worten,
n⋅2ⁿ
ist niedriger begrenzt durch2ⁿ
. Das ist intuitiv. Obwohl sie beide exponentiell sind und daher unter den meisten praktischen Umständen gleichermaßen unwahrscheinlich sind, können wir nicht sagen, dass sie in derselben Größenordnung liegen, da sie2ⁿ
notwendigerweise langsamer wachsen alsn⋅2ⁿ
.quelle
f(n) = 2*2^n
Ich denke du meintestn*2^n
?Ich argumentiere nicht mit anderen Antworten, die besagen, dass das
n⋅2ⁿ
schneller wächst als2ⁿ
. Aber dasn⋅2ⁿ
Wachstum ist immer noch nur exponentiell.Wenn wir über Algorithmen sprechen, sagen wir oft, dass die zunehmende Komplexität exponentiell ist. So sehen wir sein
2ⁿ
,3ⁿ
,eⁿ
,2.000001ⁿ
, oder unseren⋅2ⁿ
zu derselben Gruppe von Komplexität mit exponentiell wächst.Um es ein bisschen mathematisch zu verstehen, betrachten wir eine Funktion
f(x)
, die exponentiell wächst (nicht schneller als), wenn eine solche Konstante existiertc > 1
, dass .f(x) = O(cx)
Für
n⋅2ⁿ
die Konstantec
kann eine beliebige Zahl größer als2
, nehmen wir3
. Dann:n⋅2ⁿ / 3ⁿ = n ⋅ (2/3)ⁿ
und das ist weniger als1
für jedenn
.So
2ⁿ
wächst langsamer alsn⋅2ⁿ
der letzte wiederum wächst langsamer als2.000001ⁿ
. Aber alle drei wachsen exponentiell.quelle
Sie fragten: "Ist die zweite in der gleichen Reihenfolge wie die erste? Ist die zusätzliche n-Multiplikation dort von Bedeutung?" Dies sind zwei verschiedene Fragen mit zwei verschiedenen Antworten.
n 2 ^ n wächst asymptotisch schneller als 2 ^ n. Das ist die beantwortete Frage.
Aber Sie könnten fragen: "Wenn Algorithmus A 2 ^ n Nanosekunden und Algorithmus B n 2 ^ n Nanosekunden benötigt, was ist das größte n, in dem ich eine Lösung in einer Sekunde / Minute / Stunde / Tag / Monat / Jahr finden kann? Und Die Antworten sind n = 29/35/41/46/51/54 vs. 25/30/36/40/45/49. Kein großer Unterschied in der Praxis.
Die Größe des größten Problems, das in der Zeit T gelöst werden kann, ist in beiden Fällen O (in T).
quelle