Oto inny sposób powiedzenia tego.
Załóżmy, że Twój algorytm jest liniowy pod względem liczby cyfr w rozmiarze problemu. Być może masz nowy algorytm do liczenia dużej liczby, który możesz pokazać liniowo pod względem liczby cyfr. Dwudziestocyfrowa liczba zajmuje więc dwa razy więcej czasu niż 10-cyfrowy numer za pomocą twojego algorytmu. Miałoby to złożoność logów. (I byłoby to coś warte dla wynalazcy.)
Bisekcja ma to samo zachowanie. Wykonanie około 10 kroków bisekcji wymaga przecięcia długości odcinka o współczynnik 1024 = 2^10, ale tylko 20 kroków skróci ten przedział o współczynnik 2^20.
Złożoność logów nie zawsze oznacza, że algorytm jest szybki we wszystkich problemach. Współczynnik liniowy przed O (log (n)) może być duży. Tak więc twój algorytm może być okropny w przypadku małych problemów, nie przydaje się, dopóki rozmiar problemu nie jest znaczący, że inne algorytmy umierają w wyniku wykładniczej (lub wielomianowej) śmierci.
+1 bardzo interesujące. Szukam czegoś bardziej podobnego do twoich przykładów. Czy algorytm jest logarytmiczny jako: dla (int i = BIG_number; i> N; i * = 1/2) {...} –
1/2 to zero w całkowitej liczbie podziałów, ale jeśli używasz "i/= 2" zamiast , Tak to jest. (Jeśli jest to konkretny algorytm, o który się zastanawiasz, dobrym pomysłem może być uwzględnienie go w pytaniu.) –