Что не так с суммами терминов Ландау?

14

Я написал

i=1n1i=i=1nO(1)=O(n)

но мой друг говорит, что это неправильно. Из шпаргалки TCS я знаю, что сумма также называется Hn которая имеет логарифмический рост по n . Таким образом, моя граница не очень четкая, но достаточна для анализа, который мне был нужен.

Что я сделал не так?

Изменить : мой друг говорит, что с тем же рассуждением, мы можем доказать, что

i=1ni=i=1nO(1)=O(n)

Теперь это явно неправильно! Что здесь происходит?

Рафаэль
источник
2
Смотрите обсуждение тегов этого вопроса здесь .
Рафаэль
См. Также более конкретную обработку распространенного примера: какова асимптотическая среда выполнения этого вложенного цикла?
Жиль "ТАК - перестань быть злым"

Ответы:

10

То, что вы делаете, - это очень удобное злоупотребление нотацией.

Некоторые педанты скажут, что то, что вы пишете, является чепухой, поскольку обозначает множество, и вы не можете выполнять арифметические операции над ними так, как вы это делаете.O(f)

Но это хорошая идея - игнорировать этих педантов и предполагать, что обозначает некоторый член набора. Поэтому, когда мы говорим f ( n ) = g ( n ) + O ( n ) , что мы действительно имеем в виду, если это f ( n ) - g ( n ) O ( n ) . (Примечание: некоторые педанты тоже могут вздрогнуть от этого утверждения, утверждая, что f ( n ) - это число, а fO(f)f(n)=g(n)+O(n)е(N)-грамм(N)О(N)е(N)е это функция!)

Это делает очень удобным для написания таких выражений, как

nk=1nk1/kn+O(n1/3)

Это означает, что есть некоторые таким образом, чтоfO(n1/3)

nk=1nk1/kn+f(n)

В вашем случае

k=1n1k=k=1nO(1)=O(n)

Вы злоупотребляете этим еще больше, и вам нужно быть осторожным.

Здесь возможны две интерпретации: относится ли к функции n или функции k ?O(1)nk

Я считаю, что правильное толкование - это интерпретировать его как функцию от .k

Если вы попытаетесь думать о нем как о функции , считая его неправильным, это может привести к потенциальным ошибкам, например, если думать, что k есть O ( 1 ), и пытаться записать n k = 1 k = n k = 1 O ( 1 )nkO(1)k=1nk=k=1nO(1)

Если вы попытаетесь думать об этом как о функции , то верно, что если f = O ( g ) (как аргумент переходит к ) и g никогда не равно 0 , тоkf=O(g)g0

S(n)=k=1nf(k)=k=1nO(g(k))=O(k=1n|g(k)|)

Обратите внимание, что в середине мы использовали удобное злоупотребление обозначениями для обозначения того, что для некоторой функции h O ( g ) сумма равна k n k = 1 h ( k ) . Обратите внимание, что заключительная функция внутри O относится к функции n . Доказательство не так сложно, но вы должны учитывать тот факт, что вы имеете дело с асимптотической верхней границей (т.е. для достаточно больших аргументов), но сумма начинается прямо с 1 .O(g(k))hO(g)k=1nh(k)On1

Если вы попытаетесь представить его как функцию от , то также верно, что если f = O ( g ) (как аргумент идет к ), тоnf=O(g)

S(n)=k=1nf(k)=k=1nO(g(n))=O(ng(n))

Таким образом, ваше доказательство по существу правильно, в любой интерпретации.

Арьябхата
источник
1
Итог: Помните (убедитесь), что каждое вхождение символа Ландау вводит (имеет) свою собственную константу .
Рафаэль
8

То, что вы написали, совершенно правильно. Номер й гармоники действительно находится в множестве O ( n ) .nO(n)

Доказательство: . i=1n1ilnn+12n=O(n)

Верхняя граница не жесткая , но она правильная.O(n)

JeffE
источник
4
Хорошо: 1 / i ≤ 1 = O (1).
Джефф
1
Концерн направлен на второй знак равенства. Как мне это проверить?
Рафаэль
2
Но это тоже правильно. Сумма из n членов, каждый из которых является O (1), действительно является O (n).
Суреш
2
O
2
iO(1)=O(n)i=O(1)
6

Для второго примера, вы не можете утверждать, что

язнак равноО(1)

поскольку я зависит от N, После нескольких шагов это будет так, чтоi>n/2. A more appropriate way is to say that i=O(n) since indeed, throughout the summation i never exceeds 1n. By this reasoning,

i=1ni=i=1nO(n)=nO(n)=O(n2)

However the right thing to do is actually use the big-O notation only at the end. Upper bound your summation as tight as you can, and only when your done use the asymptotic notations to avoid these pitfalls.

Ran G.
источник