Ich habe festgestellt, dass Big-O von 1000n oder 10n ist das gleiche wie O (n), aber Big-O von 2^n und 3^n sind verschieden: O (2^n) und O (3^n), was ich nicht verstehe, warum können wir die Konstanten in diesem Fall (2 oder 3) nicht ignorieren und ob es einen mathematischen Beweis gibt, der dies rechtfertigt?Große O Notation der Exponentialfunktionen
Antwort
Weil es keinen konstanten Wert von k
gibt, der die Ungleichheit 3^n <= k * 2^n
für beliebig große n
erfüllt. Somit ist f(n) = 3^n
kein Mitglied von O(2^n)
.
Siehe http://en.wikipedia.org/wiki/Big_O_notation#Family_of_Bachmann.E2.80.93Landau_notations.
Um genau zu sein, zeigen Sie ein Gegenbeispiel zu der Behauptung: O (3^n) = O (2^n). Insbesondere ist "f (n) = 3^n" in "O (3^n)", aber nicht in "O (2^n)" mit dem Argument, das Sie oben angegeben haben. Daher sind die Mengen nicht über das Axiom der Erweiterbarkeit – rliu
@ roliu: Ich weiß nicht, was das Axiom ist, aber ja, das ist das implizierte Argument;) –
Es ist ein Axiom in der beliebtesten Mengenlehre, ZFC: https://de.wikipedia.org/wiki/Zermelo%E2%80%93Fraenkel_set_theory. Es sagt nur "zwei Sätze sind gleich, wenn sie die gleichen Elemente enthalten". Niemand zitiert es jemals in einem echten Beweis, aber ich versuche nur, SO davon zu überzeugen, tatsächliche mathematische Argumentation anstelle von Intuition zu verwenden (indem es mit mathematischem Jargon extrem ausführlich ist). Wenn Sie nur versuchen, die zu verwendende Implementierung zu bestimmen, während Sie Code schreiben, können Sie Intuition verwenden. Wenn jemand sagt "beweis das", dann denke ich, dass du, weißt du, Mathe verwenden solltest :) – rliu
Eventhough für den ursprünglichen Asker könnte dies nicht mehr nützlich sein,
Ich denke, es kann einfacher angegangen werden.
Grund defenition von O-Notation: iff f (g) in O (g (n)) sein würde,
dann eine rationale Zahl c existieren, für die es f (g) = c gilt, daß * g (n), für n> = n0
(N0 eine Zahl, die Sie selbst wählen)
Lassen Sie uns versuchen, dies in O 3^n anzuwenden (2^n)
3^n = 2^n * c
3^n = 2^n * (3^n/2^n)
3^n = 2^n * (3/2)^n
3^n = 2^n^n * 1,5
Dies bedeutet, dass c = 1,5^n, der nicht rational ist Nummer, sondern eine exponentielle Funktion für sich.
Auf der anderen Seite, nach dem gleichen 3^n in O (2^n), würden wir n < = 3^n * erhalten 2^(2/3)^n
Diese könnte wie ein Konflikt erscheinen, bis Sie erkennen, dass 0,75^n < 1 für alle n> 0, was bedeutet, dass, wenn Sie eine c> 1 nehmen, wird es größer als 0 sein.67^n von n = 0
um zwei Komplexitäten zusammenzufassen, f (n) und g (n) hast du das Limit angewendet: lim_ {n -> \ inf} f (n)/g (n) und du habe drei mögliche Antworten:
1) lim_ {n -> \ inf} f (n)/g (n) = 0; Dies impliziert, dass f (n) ∈ 0 (g (n)) und g (n) ∉ 0 (f (n))
2) lim_ {n -> \ inf} f (n)/g (n) = +/- inf; Dies impliziert, dass f (n) ∉ O (g (n)) und g (n) ∈ O (f (n))
3) lim_ {n -> \ inf} f (n)/g (n) ∈ Reelle Zahl; Dies impliziert, dass f (n) ∈ O (g (n)) und g (n) ∈ 0 (f (n))
Dann zu demostrade 2^n ∈ O (3^n) Sie so arbeiten
lim_ {n -> \ inf} 2^n/3^n = lim_ {n -> \ inf} (2/3)^n = 0
und ist demostrated, und wir demostraded auch 3^n ∉ O (2^n), und es ist leicht zu sehen, dass dies die Grenze für die Konvergenz auf 0 bildet, dann hängt das Ergebnis der Grenze von den Konstanten ab, ich meine lim_ {n-> inf} a^n = 0 wenn 0 < a < 1 und lim_ {n-> inf} a^n = inf wenn a> 1;
Zum besseren Verständnis Prüfung: Introduction to Algorithms, dritte Auflage Von Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest und Clifford Stein
Ich bin Professor für Algorithmen, ich hoffe, es half Sie. Pass auf.
- 1. Algorithmus-Analyse - Große O-Notation
- 2. Diskrete Mathematik Große O-Notation
- 3. Große O-Notation für Dreieckszahlen?
- 4. Große O Notation für einen Algorithmus
- 5. Summe der O-Notation
- 6. Ermitteln der BIg O-Notation dieser Schleife
- 7. Große O-Notation für zwei nicht verschachtelte Schleifen
- 8. Zeitkomplexität: Mit O-Notation
- 9. Algorithmen für große O-Analyse
- 10. Große O Laufzeit dieses Algorithmus
- 11. Hilfe mit großer O-Notation
- 12. Big O Notation Zeit Frage
- 13. Big O Notation und Algorithmen
- 14. Große O - Nested Loops
- 15. Big-O-Notation mit zwei Variablen
- 16. Wie bestimme ich, Big-O-Notation
- 17. die folgende Implikation (Big O Notation)
- 18. Hausaufgaben - Big O Notation und Rechenzeit
- 19. Große O von rekursiven Methoden
- 20. Werden Algorithmen auf der Big-o-Notation von Parallelität beeinflusst?
- 21. Java Große O-Notation von 3 verschachtelten Loops von Log (n)
- 22. Unterschied zwischen zwei Codes in großer O-Notation in Java
- 23. Große O-Effizienz für mehrere Variablen
- 24. Komplexität anderer Algorithmen als asymptotisch (Big-O-Notation)
- 25. Big-O der Liste Slicing
- 26. Was sind die großen O Notation für diese for-Schleifen?
- 27. Was ist eine Groß-O-Notation? Wie kommst du auf Zahlen wie O (n)?
- 28. Wie lautet die Big-O-Notation für die Funktion str.replace in Python?
- 29. Was ist die Groß-O-Notation für die Iteration durch NSSet und NSDictionary
- 30. Gibt es eine Master-Liste der Big-O-Notation für alles?
Sie ignorieren Konstanten nicht in der Groß-O-Notation. Sie ignorieren Koeffizienten. 2 und 3 sind Basen, keine Koeffizienten. – kqr
Können Sie die Definition von Big-Oh angeben? Denken Sie daran, dass Big-Oh eine mathematische Definition hat und nicht vollständig intuitiv verwendet werden sollte. Sich zu merken, dass "man manchmal Konstanten ignorieren kann" ist meiner Meinung nach eine schlechte Angewohnheit. – rliu