Prolog: Die Big- Notation ist ein klassisches Beispiel für die Kraft und Mehrdeutigkeit einiger Notationen als Teil der Sprache, die der menschliche Verstand liebt. Egal wie viel Verwirrung es verursacht hat, es bleibt die Wahl der Notation, um die Ideen zu vermitteln, die wir leicht identifizieren und effizient vereinbaren können.O
Ich verstehe vollkommen, was große Notation bedeutet. Mein Problem ist, wenn wir sagen , wobei die Laufzeit eines Algorithmus bei Eingabe der Größe .OT(n)=O(f(n))T(n)n
Entschuldigung, aber Sie haben kein Problem, wenn Sie die Bedeutung der Big- Notation verstehen .O
Ich verstehe die Semantik davon. Aber und sind zwei verschiedene Dinge. ist eine exakte Zahl, aber ist keine Funktion, die eine Zahl ausspuckt. Technisch können wir also nicht sagen, dass gleich , wenn man fragt Sie, was ist der Wert von , was wäre Ihre Antwort? Es gibt keine Antwort.T(n)O(f(n))T(n)O(f(n))T(n) O ( f ( n ) ) O ( f ( n ) ) O(f(n))O(f(n))
Wichtig ist die Semantik . Was wichtig ist, ist, wie sich die Menschen leicht auf eine der genauen Interpretationen einigen können, die uns interessierendes asymptotisches Verhalten oder Zeit- oder Raumkomplexität beschreiben. Die vorgegebene genaue Interpretation / Definition von ist, wie aus Wikipedia übersetzt ,T(n)=O(f(n))
T ist eine reelle oder komplexe Wertfunktion und ist eine reelle Wertfunktion, die beide auf einer unbegrenzten Teilmenge der reellen positiven Zahlen definiert sind, so dass für alle ausreichend großen Werte von streng positiv ist . Für alle ausreichend großen Werte von ist der Absolutwert von höchstens ein positives konstantes Vielfaches von . Das heißt, es gibt eine positive reelle Zahl und eine reelle Zahl so dassff(n)nnT(n)f(n)Mn0
for all n≥n0,|T(n)|≤Mf(n) for all n≥n0.
Bitte beachten Sie, dass diese Interpretation als Definition gilt . Alle anderen Interpretationen und Verstehen, die Ihnen auf verschiedene Weise sehr helfen können, sind zweitrangig und folgerichtig. Jeder (zumindest jeder hier) stimmt dieser Interpretation / Definition / Semantik zu. Solange Sie diese Interpretation anwenden können, sind Sie wahrscheinlich die meiste Zeit gut. Entspannen Sie sich und fühlen Sie sich wohl. Sie möchten nicht zu viel darüber nachdenken, genauso wenig wie Sie über einige der Unregelmäßigkeiten in Englisch, Französisch oder den meisten natürlichen Sprachen nachdenken. Verwenden Sie einfach die Notation nach dieser Definition.
T(n)O ( f ( n ) ) T ( n ) O ( f ( n ) ) O ( f ( n ) ) ist eine exakte Zahl, aber ist keine Funktion, die eine Zahl ausspuckt. Technisch können wir also nicht sagen, dass gleich , wenn man fragt Sie, was ist der Wert von , was wäre Ihre Antwort? Es gibt keine Antwort.O(f(n))T(n) O(f(n))O(f(n))
In der Tat konnte es keine Antwort geben, da die Frage schlecht gestellt ist. bedeutet keine exakte Zahl. Es soll für eine Funktion stehen, deren Name und deren formaler Parameter (was in gewisser Weise an das in gebunden ist ). Genauso richtig und umso mehr, wenn wir schreiben . Wenn die Funktion ist, die auf abbildet , und die Funktion ist, die auf abbildet , ist es auch üblich, oder zu schreibenT(n)Tnnf(n)T=O(f)Tnn2fnn3f(n)=O(n3)n2=O(n3)O. Bitte beachten Sie auch, dass die Definition nicht besagt, dass eine Funktion ist oder nicht. Es heißt nicht, dass die linke Seite der rechten Seite überhaupt gleich sein soll! Sie haben zu Recht den Verdacht, dass Gleichheitszeichen keine Gleichheit im eigentlichen Sinne bedeuten , bei der Sie beide Seiten der Gleichheit vertauschen können und die durch ein gleichwertiges Verhältnis gesichert sein sollte. (Ein weiteres, noch berühmteres Beispiel für den Missbrauch des Gleichheitszeichens ist die Verwendung des Gleichheitszeichens, um die Zuweisung in den meisten Programmiersprachen zu bedeuten, anstatt in einigen Sprachen umständlicher zu sein.)O:=
Wenn wir uns nur um diese eine Gleichheit kümmern (ich fange an, auch die Sprache zu missbrauchen. Es ist keine Gleichheit , es ist jedoch eine Gleichheit, da die Notation ein Gleichheitszeichen enthält oder sie als eine Art Gleichheit ausgelegt werden könnte ), ist diese Antwort erledigt.T(n)=O(f(n))
Die Frage geht jedoch tatsächlich weiter. Was bedeutet das zum Beispiel ? Diese Gleichheit wird von der obigen Definition nicht erfasst. Wir möchten eine andere Konvention einführen, die Platzhalter-Konvention . Hier ist die vollständige Erklärung der Platzhalterkonvention, wie in Wikipedia angegeben .f(n)=3n+O(logn)
Bei komplizierterer Verwendung kann an verschiedenen Stellen in einer Gleichung auftreten, sogar mehrmals auf jeder Seite. Zum Beispiel gilt Folgendes für .O(⋯)n→∞
(n+1)2=n2+O(n)
(n+O(n1/2))(n+O(logn))2=n3+O(n5/2)
nO(1)=O(en)
Die Bedeutung solcher Anweisungen ist wie folgt: Für alle Funktionen, die jedes auf der linken Seite erfüllen, gibt es einige Funktionen, die jedes auf der rechten Seite erfüllen , so dass alle diese Funktionen in die Gleichung eingesetzt werden macht die beiden Seiten gleich. Zum Beispiel bedeutet die obige dritte Gleichung: "Für jede Funktion gibt es eine Funktion so dass . "O(⋯)O(⋯)f(n)=O(1)g(n)=O(en)nf(n)=g(n)
Möglicherweise möchten Sie hier ein weiteres Beispiel für die Platzhalterkonvention in Aktion suchen.
Sie haben vielleicht bemerkt, dass ich die satztheoretische Erklärung der großen Anmerkung nicht verwendet habe. Alles, was ich getan habe, ist, auch ohne diese satztheoretische Erklärung wie " ist ein Satz von Funktionen" zu zeigen, dass wir die große Anmerkung immer noch vollständig und perfekt verstehen können . Wenn Sie diese satztheoretische Erklärung nützlich finden, fahren Sie trotzdem fort.OO(f(n))O
Sie können den Abschnitt in „asymptotischer Notation“ überprüfen von CLRS für ein detailliertere Analyse und Nutzungsmuster für die Familie von Notationen für asymptotisches Verhalten, wie groß , , kleines , kleine , mit mehrere Variablen Nutzung und vieles mehr. Der Wikipedia-Eintrag ist auch eine ziemlich gute Referenz.ΘΩoω
Schließlich gibt es einige inhärente Mehrdeutigkeiten / Kontroversen bei der großen Notation mit mehreren Variablen, 1 und 2 . Vielleicht möchten Sie zweimal überlegen, wenn Sie diese verwenden.O