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 f
immer 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 < 2
das wahr ist. Bedeutet das, dass 1
das 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 f
wächst "genauso schnell" wieg
. Es ist eine Äquivalenzbeziehung.
Deutung
Angenommen, Sie haben zwei Algorithmen f
und 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 f
immer so schnell wie möglich ausgeführt wird g
.
Groß oh
Angenommen , wenn Sie über genügend Daten verfügen, ist f
die 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_0
damit 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 c
als kleiner definiere , als a-1
es 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 a
es sich um eine positive reelle Zahl handelt, müssen Sie den Proof jedoch geringfügig ändern, da er a - 1
mö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 <=>
.