Tak, dla odpowiednio małego N. Zawsze będzie N, powyżej którego zawsze będziesz mieć porządek O (1) <O (lg N) <O (N) <O (N log N) <O (N ^ c ) <O (c ^ N) (gdzie O (1) <O (lg N) oznacza, że w algorytmie O (1) zajmie mniej operacji, gdy N jest odpowiednio duże, a c jest pewną stałą stałą, która jest większa niż 1 ).
Powiedzmy, że określony algorytm O (1) wymaga dokładnie f (N) = 10 ^ 100 (googol) operacji, a algorytm O (N) wymaga dokładnie g (N) = 2 N + 5 operacji. Algorytm O (N) da większą wydajność, dopóki N nie będzie z grubsza googolem (właściwie kiedy N> (10 ^ 100 - 5) / 2), więc jeśli spodziewałeś się, że N będzie w zakresie od 1000 do miliarda poniósłby poważną karę przy użyciu algorytmu O (1).
Lub dla realistycznego porównania, powiedzmy, że mnożycie liczby n-cyfrowe razem. Algorytm karacuby co najwyżej 3 n ^ (LG3) operacji (to jest w przybliżeniu O (n ^ 1,585)), podczas gdy algorytm Schönhage-Strassen O (N log n Log N), który jest szybszy celu , ale środki wikipedia:
W praktyce algorytm Schönhage – Strassen zaczyna przewyższać starsze metody, takie jak mnożenie Karatsuba i Toom – Cook dla liczb przekraczających 2 ^ 2 ^ 15 do 2 ^ 2 ^ 17 (10 000 do 40 000 cyfr dziesiętnych). [4] [5] [6 ]
Więc jeśli mnożycie razem 500 cyfr, nie ma sensu używać algorytmu, który jest „szybszy” przez duże argumenty O.
EDYCJA: Możesz znaleźć określenie f (N) w porównaniu g (N), biorąc limit N-> nieskończoność f (N) / g (N). Jeśli granica wynosi 0, to f (N) <g (N), jeśli granica jest nieskończonością, to f (N)> g (N), a jeśli granica jest jakąś inną stałą to f (N) ~ g (N) pod względem dużej notacji O.