Die Big Oh-Notation (O, Theta, Omega) handelt von Wachstumsraten von Funktionen.
Wenn Sie einen Algorithmus implementieren, weist dieser eine bestimmte Eigenschaft auf, wie sich die Laufzeit ändert, wenn Sie den Datensatz vergrößern. Jetzt können Sie den Algorithmus optimieren, damit er um den Faktor 100 schneller läuft. Sicher, das ist großartig, aber im Grunde ist es immer noch derselbe Algorithmus. In einigen Jahren sind Computer möglicherweise doppelt so schnell wie heute.
Die Landau-Notation entzieht diese konstanten Faktoren. Es ist egal, ob ein Algorithmus fimmer doppelt so schnell ist wie ein anderer g: Vielleichtg kann möglicherweise so optimiert werden, dass er viermal schneller ausgeführt wird, oder Sie können stattdessen schnellere Hardware kaufen. Wenn Sie es aus dieser Perspektive betrachten, könnten Sie sagen, dass sie "gleich" sind. (Das heißt nicht, dass Sie konstante Faktoren in der Praxis (immer) ignorieren können.)
Big oh gibt eine Obergrenze an, ähnlich der <= Relation.
Sie werden zustimmen, dass 1 < 2das wahr ist. Bedeutet das, dass 1das nicht weniger sein kann als jede andere Zahl? Sicherlich nicht. Es gibt unendlich viele Zahlen, die größer sind als1 .
Mit Wachstumsraten ist es ähnlich. O(n)bezeichnet die Menge aller Funktionen, die linear (oder langsamer) wachsen.O(n^2)bezeichnet dagegen alle Funktionen, die mit quadratischer Komplexität (oder langsamer) wachsen. Sie werden mir sicher zustimmen, dass eine lineare Funktion langsamer wächst als eine quadratische Funktion.
Aus diesem Grund kann eine Funktion mehr als einer "Big-Oh" -Klasse angehören.
Hier ein Vergleich verschiedener Funktionen mit
: (aus Knuths Konkreter Mathematik)

Von links nach rechts wachsen die Funktionen schneller.
Außerdem
wächst die Bedeutung von n ^ 2 schneller als n ^ 1, weil 2> 1.
Definitionen

"f wächst schneller oder genauso schnell wie g"

"f wächst langsamer oder genauso schnell wie g"

Die Kombination der beiden oben. Es heißt, die Funktion fwächst "genauso schnell" wieg . Es ist eine Äquivalenzbeziehung.
Deutung
Angenommen, Sie haben zwei Algorithmen fund g.
Omega
Angenommen
,
es gibt unabhängig von Ihrem Budget keine konstante Menge an Rechenleistung, die Sie Ihrem System hinzufügen können und die fimmer so schnell wie möglich ausgeführt wird g.
Groß oh
Angenommen
,
wenn Sie über genügend Daten verfügen, ist fdie Ausführung immer schneller als g, unabhängig davon, wie viel Rechenleistung Sie Ihrem System hinzufügen.
Beweis
Wenn Sie wirklich versuchen, dies zu beweisen, müssen Sie anhand der Definitionen der Landau-Notation nachweisen, dass Ihre Funktion die erforderlichen Bedingungen erfüllt.
Sie müssen also Werte für c, finden d, n_0damit die Bedingung erfüllt ist.
Hier ist, wie Sie das für die untere Schranke machen können mit c:

Es ist wichtig zu wissen, dass ich es willkürlich cals kleiner definiere , als a-1es vollkommen in Ordnung ist. Die Definition von Theta (g) besagt, dass "da ist ein c". Es kann ein beliebiger Wert sein, solange er größer als 0 ist. (Wenn aes sich um eine positive reelle Zahl handelt, müssen Sie den Proof jedoch geringfügig ändern, da er a - 1möglicherweise negativ ist.)
(Ich gehe davon aus a, dass es sich um eine positive Funktion handelt, andernfalls ist die Funktion für große Werte von immer negativ n, was für eine Funktion, die die Laufzeit angibt, keinen Sinn macht.)
Sie können versuchen, es für die obere Schranke zu tun, es ist ziemlich ähnlich. Wenn Sie nicht wissen, wie, kann ich Ihnen einen Beweis liefern.
Tipp: Beginnen Sie mit d > a + 1
Beachtung
Es ist wichtig, dass Sie nicht den falschen Weg beweisen. Wenn Sie annehmen, dass (an + b) in O (n) steht und von dort aus fortfahren, haben Sie nicht bewiesen, was Sie wollten. Sie müssen sicherstellen , dass alle Ihre Schritte gehen sowohl Art und Weise, dh statt =>Sie haben <=>.