Nie każda para funkcji jest porównywalna z notacją ; pod funkcji f ( n ) = n i
g ( n ) = { 1 , gdy n jest liczbą nieparzystą , n 2 , gdy n jest nawet .
Co więcej, funkcje takie jak g ( n ) faktycznie powstają jako czasy działania algorytmów. Rozważ oczywisty algorytm brute-force, aby ustalić, czy dana liczba całkowita n jest liczbą pierwszą:O ( ⋅ )fa( n ) = n
sol( n ) = { 1 n2)jeśli n jest nieparzyste ,jeśli n jest parzyste .
sol( n )n
IsPrime(n):
for i ← 2 to (n-1)
if i·⌊n/i⌋ = n
return False
return True
Algorytm ten wymaga operacji arytmetycznych gdy n jest parzyste, O ( √Θ ( 1 )noperacje, gdynjest złożone, aleΘ(n)operacje, gdynjest liczbą pierwszą. Zatem formalnie algorytm ten jestnieporównywalnyz algorytmem wykorzystującym √O(n−−√)nΘ(n)n operacji arytmetycznych dlakażdegon.n−−√ n
W większości przypadków, gdy analizujemy algorytmy, chcemy jedynie asymptotycznej górnej granicy formy dla pewnej stosunkowo prostej funkcji f . Na przykład większość podręczników po prostu (i poprawnie) raportuje, że działa w operacjach arytmetycznych O ( n ) . Typowe górne granice funkcji są iloczynami wykładników, wielomianów i logarytmów (chociaż czasami pojawiają się bardziej egzotyczne bestie, takie jak silnia i logarytmy iterowane ). Nietrudno udowodnić, że dowolne dwie takie funkcje są porównywalne.O(f(n))fIsPrime(n)
O(n)
Zobacz także to pytanie MathOverflow .