Постоянные факторы игнорируются, потому что время выполнения и потребление памяти (два свойства, наиболее часто измеряемые с помощью 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-битном ПК» просто бесполезно.
Игнорирование констант позволяет нам рассуждать о свойствах алгоритма независимо от реализации и платформы.