Всегда ли O (log n) быстрее, чем O (n) - PullRequest
15 голосов
/ 09 февраля 2012

Если есть 2 алгоритма, которые вычисляют один и тот же результат с различной сложностью, будет ли O (log n) всегда быстрее?Если так, пожалуйста, объясните.Кстати, это не вопрос задания.

Ответы [ 3 ]

27 голосов
/ 09 февраля 2012

Нет. Если один алгоритм работает в N/100, а другой - в (log N)*100, то второй будет медленнее для меньших входных размеров. Асимптотические сложности связаны с поведением времени выполнения, когда входные размеры уходят в бесконечность.

16 голосов
/ 09 февраля 2012

Нет, это не всегда будет быстрее.НО, по мере того, как размер проблемы становится все больше и больше, в конечном итоге вы всегда достигнете точки, где алгоритм O (log n) быстрее, чем алгоритм O (n).

В действительностиВ мировых ситуациях обычно точка, в которой алгоритм O (log n) обгоняет алгоритм O (n), наступает очень быстро.Существует большая разница между O (log n) и O (n), так же, как существует большая разница между O (n) и O (n ^ 2).

Если у вас когда-нибудь будет возможностьпрочитайте Programming Pearls Джона Бентли, там есть потрясающая глава, где он сравнивает алгоритм O (n) с алгоритмом O (n ^ 2), делая все возможное, чтобы получить O (n ^ 2)преимущество.(Он кодирует алгоритм O (n ^ 2) в C на Alpha и алгоритм O (n) в интерпретируемом Бейсике на старом Z80 или чем-то, работающем на частоте около 1 МГц.) Удивительно, как быстро O (n)Алгоритм обгоняет O (n ^ 2).

Иногда, однако, вы можете найти очень сложный алгоритм, который по сложности немного лучше, чем более простой.В таком случае не выбирайте вслепую алгоритм с лучшим big-O - вы можете обнаружить, что он работает быстрее только при чрезвычайно больших задачах.

0 голосов
/ 11 февраля 2019

Для ввода размера n алгоритм O (n) будет выполнять шаги, пропорциональные n, тогда как другой алгоритм O (log (n)) будет выполнять шаги примерно log (n).

Понятно, что log (n) меньше n, поэтому алгоритм сложности O (log (n)) лучше.Так как это будет намного быстрее.

Больше ответов от stackoverflow

...