Вот еще один способ сказать это.
Предположим, что ваш алгоритм является линейным в количестве цифр в размере проблемы. Итак, возможно, у вас есть новый алгоритм для большого количества чисел, которые можно показать как линейные по числу цифр. Таким образом, 20-разрядное число занимает в два раза больше, чем 10-разрядное число, используя ваш алгоритм. У этого была бы сложность журнала. (И это было бы полезно для изобретателя.)
Bisection имеет такое же поведение. Требуется примерно 10 шагов деления пополам, чтобы сократить длину интервала в 1024 = 2^10, но только 20 шагов сократят интервал в 2 раза.
Сложность журнала не всегда означает, что алгоритм быстро устраняет все проблемы. Линейный коэффициент перед O (log (n)) может быть большим. Таким образом, ваш алгоритм может быть ужасен по небольшим проблемам, а не становиться полезным до тех пор, пока размер проблемы не будет значительно большим, чтобы другие алгоритмы умирали экспоненциальной (или полиномиальной) смертью.
+1 очень интересно. Я ищу что-то вроде ваших примеров больше. Является ли алгоритм логарифмическим как: for (int i = BIG_number; i> N; i * = 1/2) {...} –
1/2 равно нулю в целых делениях, но если вы используете вместо этого «i/= 2» , да. (Если это конкретный алгоритм, о котором вам интересно, возможно, было бы неплохо включить его в ваш вопрос.) –