Почему константы игнорируются в асимптотическом анализе? - PullRequest
2 голосов
/ 11 ноября 2010

Почему константы игнорируются при асимптотическом анализе?

Ответы [ 3 ]

1 голос
/ 11 ноября 2010

Постоянные факторы игнорируются, потому что время выполнения и потребление памяти (два свойства, наиболее часто измеряемые с помощью O-записи) гораздо сложнее рассуждать при рассмотрении постоянных факторов.

Если мы определим U( f(n) ) как набор всех функций g, для которых существует N, такой, что для всех N > n: g(n) <= f(n) (т. Е. Такой же, как O без постоянного множителя), это гораздо сложнее показать, что время выполнения алгоритма в U( f(n) ), чем O( f(n) ).

Во-первых, нам нужна точная единица измерения времени работы. Использование инструкции ЦП в качестве основного модуля будет работать, но это будет зависеть от точной реализации алгоритма, а также от архитектуры процессора, на котором он выполняется.

Это похоже на потребление памяти: разные реализации одного и того же алгоритма будут различаться по потреблению памяти (на постоянный коэффициент). Кроме того, если реализация использует много указателей, та же самая реализация будет использовать примерно в два раза больше памяти на 64-разрядной машине, чем на 32-разрядной машине. Но говорить такие вещи, как «потребление памяти этим алгоритмом при реализации с использованием этого C-кода в O(23 * n) на 32-битном ПК Intel. В O(42 * n) на 64-битном ПК» просто бесполезно.

Игнорирование констант позволяет нам рассуждать о свойствах алгоритма независимо от реализации и платформы.

1 голос
/ 11 ноября 2010

Это из-за теоремы линейного ускорения для машин Тьюринга.

Если вы покажете мне машину Тьюринга, которая решает проблему размера n с шагом f ( n ) и задаете постоянную c > 0, я могу сделать машину Тьюринга, которая решает ту же проблему, за c f ( n ) шагов (или один шаг, если c f ( n ) <1). Например, взяв <em>c = ½, моя машина может решить ту же проблему в два раза меньше, чем за несколько шагов. Или, взяв c = 1 / 1000000 , моя машина сможет решить ту же проблему всего за миллионную долю шагов!

Этот результат делает постоянные факторы неинтересными (теоретически: очевидно, что на практике они все еще имеют некоторый интерес).

0 голосов
/ 11 ноября 2010

Если вы говорите об этом

http://www.cs.cornell.edu/courses/cs312/2004fa/lectures/lecture16.htm

Когда вы анализируете время выполнения (или какой-либо другой аспект) алгоритма и обнаруживаете, что это что-то вроде

 n ^ 2  + k

Затем, когда вы вычисляете время производительности big-O - не имеет смысла смотреть на k, потому что вы хотите знать время выполнения, когда n становится большим.n ^ 2 намного больше, чем k - что вы можете спокойно его игнорировать.

...