(Da dies eine längere Antwort ist, lesen Sie die Fettschrift für eine Zusammenfassung. )
Lassen Sie uns Ihr Beispiel nehmen und Schritt für Schritt durchgehen, um den Zweck zu verstehen, der hinter dem steht, was wir tun. Wir beginnen mit Ihrer Funktion und dem Ziel, die Big Oh-Notation zu finden:
f(n) = 6n+4
Erstens lassen O(g(n))
die Big Oh Notation wir zu finden versuchen f(n)
. Nach der Definition von Big Oh müssen wir eine vereinfachte g(n)
Form finden, bei der es einige Konstanten gibt c
und n0
bei der c*g(n) >= f(n)
gilt, dass alle n
größer sind als n0
.
Lassen Sie uns zuerst wählen g(n) = 6n + 4
(was O(6n+4)
in Big Oh ergeben würde ). In diesem Fall sehen wir, dass c = 1
und jeder Wert von n0
die mathematischen Anforderungen aus unserer Definition von Big Oh erfüllt, da g(n)
immer gleich ist f(n)
:
c*g(n) >= f(n)
1*(6n + 4) >= 6n + 4 //True for all n's, so we don't need to pick an n0
Zu diesem Zeitpunkt haben wir die mathematischen Anforderungen erfüllt. Wenn wir bei stehen bleibenO(6n+4)
, ist es klar, dass dies nicht hilfreicher ist als das Schreiben f(n)
. Es würde also den wahren Zweck der Big Oh-Notation verfehlen: die allgemeine zeitliche Komplexität eines Algorithmus zu verstehen! Fahren wir also mit dem nächsten Schritt fort: der Vereinfachung.
Erstens, können wir das 6n
so vereinfachen, dass das große Oh ist O(4)
? Nein! (Übung für den Leser, wenn er nicht versteht warum)
Zweitens können wir das vereinfachen, 4
so dass das große Oh ist O(6n)
? Ja! In diesem Fall g(n) = 6n
also:
c*g(n) >= f(n)
c*6n >= 6n + 4
An dieser Stelle wählen wir, dass c = 2
die linke Seite für jedes Inkrement von um 12 schneller (um 12) als die rechte Seite (um 6) ansteigt n
.
2*6n >= 6n + 4
Jetzt müssen wir ein Positiv finden, n0
bei dem die obige Gleichung für alle gilt n
, die größer als dieser Wert sind. Da wir bereits wissen, dass die linke Seite schneller wächst als die rechte, müssen wir nur eine positive Lösung finden. Da somit n0 = 2
die oben wahr macht, wissen wir , dass g(n)=6n
, oder O(6n)
ist eine potentielle Big Oh Notation f(n)
.
Können wir das vereinfachen, 6
damit das große Oh ist O(n)
? Ja! In diesem Fall g(n) = n
also:
c*g(n) >= f(n)
c*n >= 6n + 4
Wählen wir, c = 7
da die linke schneller zunimmt als die rechte.
7*n >= 6n + 4
Wir sehen, dass das oben Gesagte für alle gilt n
, die größer oder gleich sind n0 = 4
. Somit O(n)
ist eine potenzielle Big Oh-Notation für f(n)
. Können wir noch vereinfachen g(n)
? Nee!
Schließlich haben wir festgestellt, dass die einfachste Big Oh-Notation für f(n)
ist O(n)
. Warum haben wir das alles durchgemacht? Weil wir jetzt wissen, dass dies f(n)
linear ist , da die Big Oh-Notation von linearer Komplexität ist O(n)
. Das Schöne ist, dass wir jetzt die zeitliche Komplexität f(n)
mit anderen Algorithmen vergleichen können! Zum Beispiel wissen wir jetzt , dass f(n)
in vergleichbarer Zeit Komplexität der Funktionen ist h(n) = 123n + 72
, i(n) = n
, j(n) = .0002n + 1234
, etc; da sie denselben oben beschriebenen Vereinfachungsprozess verwenden, haben sie alle eine lineare Zeitkomplexität von O(n)
.
Süss!!!