Nicht jedes Funktionspaar ist mit der Notation vergleichbar . Betrachte die Funktionen und
Außerdem entstehen Funktionen wie tatsächlich als Laufzeiten von Algorithmen. Betrachten Sie den offensichtlichen Brute-Force-Algorithmus, um festzustellen, ob eine bestimmte Ganzzahl eine Primzahl ist:f ( n ) = n g ( n ) = { 1, wenn n ungerade ist , n 2, wenn n gerade ist . g ( n ) nO ( ⋅ )f( n ) = n
G( n ) = { 1 n2wenn n ungerade ist ,wenn n ist sogar .
G( n )n
IsPrime(n):
for i ← 2 to (n-1)
if i·⌊n/i⌋ = n
return False
return True
Dieser Algorithmus erfordert arithmetische Operationen, wenn n gerade ist, O ( √Θ ( 1 )nOperationen, wennn zusammengesetztist, aberΘ(n)Operationen, wennnPrimzahl ist. Daher ist dieser Algorithmus formalnichtmit einem Algorithmus zu vergleichen, der √ verwendetO(n−−√)nΘ(n)n arithmetische Operationen fürjedesn.n−−√ n
Die meiste Zeit, wenn wir Algorithmen analysieren, wollen wir nur eine asymptotische Obergrenze der Form für eine relativ einfache Funktion f . Zum Beispiel sind die meisten Lehrbücher würde einfach (und richtig) berichten , dass läuft in O ( n ) arithmetischen Operationen. Typische Funktionen der oberen Schranke sind Produkte von Exponentialen, Polynomen und Logarithmen (obwohl gelegentlich auch exotischere Tiere wie Fakultäten und iterierte Logarithmen auftauchen). Es ist nicht schwer zu beweisen, dass zwei solcher Funktionen vergleichbar sind.O(f(n))fIsPrime(n)
O(n)
Siehe auch diese MathOverflow-Frage .