Landau的总和出了什么问题?


14

我写

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

但是我的朋友说这是错误的。从TCS备忘单中,我知道总和也称为,其对数增长。所以我的界限不是很敏锐,但足以满足我需要的分析需求。Hnn

我做错了什么?

编辑:我的朋友说,以同样的理由,我们可以证明

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

现在,这显然是错误的!这里发生了什么?


2
在此处查看有关此问题标签的讨论。
拉斐尔

关于标签算法的元讨论
卡夫

Answers:


10

您正在做的是一种非常方便的符号滥用。

一些书呆子会说您写的是胡说八道,因为表示集合,并且您无法按照自己的方式对其进行算术运算。O(f)

但是,最好不要理会那些学徒,并假设代表集合中的某个成员。所以,当我们说˚F ñ = g ^ ñ + Øñ ,我们真正的意思如果˚F ñ - g ^ ñ Øñ 。(请注意:有些学究者可能也会对此陈述感到震惊,声称f n 是一个数字,而fO(f)Fñ=Gñ+ØñFñ-GñØñFñF 是功能!)

这使得编写如下表达式非常方便

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

如果尝试将其视为的函数,认为不是不正确,则可能会导致潜在的谬误,例如认为kO1 并尝试写n k = 1 k = n k = 1 O1 nkO(1)k=1nk=k=1nO(1)

如果您尝试将其视为的函数,则可以肯定的是,如果f = Og (随着参数转到)并且g永远不会为0,则kf=O(g)g0

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

需要注意的是在中间,我们使用符号的方便滥用来表示为一些功能ħ ø的总和为Σ Ñ ķ = 1 ħ ķ 。注意,O内部的最终函数是指n的函数。证明并不是那么困难,但是您必须迎合一个事实,即您正在处理一个渐近上限(即,对于足够大的参数),但是总和从1开始。O(g(k))hO(g)k=1nh(k)On1

如果您尝试将其视为的函数,那么也确实是如果f = Og (因为参数转到),则nf=O(g)

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

因此,无论哪种解释,您的证明都是正确的。


1
底线:请注意(确保)每次出现的Landau符号都会引入(具有)自己的常量
拉斐尔

8

你写的是完全正确的。实际上,第次谐波数在集合O n )中nO(n)

证明: i=1n1ilnn+12n=O(n)

的上限并不严格,但这是正确的。O(n)


4
好的:1 / i≤1 = O(1)。
JeffE 2012年

1
关注的是第二个平等标志。我该如何验证?
拉斐尔

2
但这也是正确的。n个项的总和确实是O(n),每个项均为O(1)。
Suresh 2012年

2
@Suresh仅当O s所隐含的常量独立于求和变量时,这才是此处的要点(种子问题)。O
拉斐尔

2
iO(1)=O(n)i=O(1)

6

i=O(1)

ini>n/2i=O(n)i1n

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.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.