Какие есть примеры, когда нотация Big-O [1] на практике не срабатывает?
То есть: когда время работы алгоритмов Big-O предсказывает алгоритм A быстрее, чем алгоритм B, но на практике алгоритм B быстрее при его запуске?
Немного шире: когда наблюдаются теоретические прогнозы о несоответствии производительности алгоритма? Прогноз не-Big-O может основываться на среднем / ожидаемом количестве вращений в дереве поиска или количестве сравнений в алгоритме сортировки, выраженном как коэффициент, умноженный на количество элементов.
Разъяснение
Несмотря на то, что говорится в некоторых ответах, обозначение Big-O означает , предназначенное для прогнозирования производительности алгоритма. Тем не менее, это некорректный инструмент: он говорит только об асимптотической производительности и размывает постоянные факторы. Он делает это по причине: он предназначен для прогнозирования алгоритмической производительности независимо от того, на каком компьютере вы выполняете алгоритм.
Что я хочу знать, так это : когда проявляются недостатки этого инструмента? Я обнаружил, что запись Big-O довольно полезна, но далека от совершенства. Каковы подводные камни, крайние случаи, ошибки?
Пример того, что я ищу: запустив алгоритм кратчайшего пути Дейкстры с кучей Фибоначчи вместо двоичной кучи, вы получите время O (m + n log n) против O ((m + n) log n) , для n вершин и m ребер. Рано или поздно вы ожидаете увеличения скорости из кучи Фибоначчи, но в моих экспериментах увеличение скорости никогда не материализовалось.
(Экспериментальные данные, без доказательств, предполагают, что двоичные кучи, работающие на равномерно случайных весах ребер, тратят O (1) времени, а не O (log n); это одна большая ошибка для экспериментов. ожидаемое количество вызовов DecreaseKey).
[1] Действительно, это не нотация , которая терпит неудачу, а понятия , за которыми стоит нотация, и теоретический подход к прогнозированию производительности алгоритма. </ Анти-педантизм>
На принятый ответ :
Я принял ответ, чтобы выделить те ответы, на которые я надеялся. Существует много разных ответов, которые так же хороши :) Что мне нравится в ответе, так это то, что он предлагает общее правило для случая, когда нотация Big-O «терпит неудачу» (когда отсутствует кэш, доминирует во времени выполнения), что также может улучшить понимание (в некотором смысле Я не уверен, как лучше экспресс-банкомат).