Вы можете игнорировать меньшие термины только при их постоянном количестве.
Возможность игнорировать меньшие термины фактически вытекает из того факта, что вы можете игнорировать постоянные факторы, но это работает только тогда, когда у вас естьпостоянное количество меньших членов (иначе постоянный коэффициент не будет постоянным).
Интуитивно:
Что если у вас 50000000000 строк длиной 10?Какой-то предопределенный коэффициент 10 log 10
не подходит для времени выполнения, вам нужно где-то 50000000000.
Математически:
Допустим, у вас есть f(n) + g(n)
, где g(n)
меньше f(n)
, поскольку n
стремится к бесконечности.
Вы можете сказать, что:
f(n) <= f(n) + g(n) <= f(n) + f(n) = 2.f(n) (as n tends to infinity)
Теперь вы отменили g(n)
и существует только постоянный коэффициент между 1
и 2
для f(n)
, который можно игнорировать с помощью асимптотической записи, поэтому сложность просто равна O(f(n))
.
Если у вас есть переменное число a
условий, у вас будет a.f(n)
, и вы не можете игнорировать это a
.
Доказательство a.f(n) = O(f(n))
(по крайней мере, один способ доказать это) включает в себя выбор константы M
такое, что |a.f(n)| <= M.f(n)
от некоторого значения n
и далее.Независимо от того, какое значение M
вы выберете, всегда может существовать большее значение a
(просто M+1
будет работать), поэтому это доказательство не сработает.