【发布时间】:2014-09-15 01:49:53
【问题描述】:
我有点困惑。如果我必须证明,
现在,在这里,如果我计算极限,
由此我可以说这确实属于 big-o(4n)。 是 对于 n 的任何值,这都不正确。 这是正确的证明方式吗?
【问题讨论】:
我有点困惑。如果我必须证明,
现在,在这里,如果我计算极限,
由此我可以说这确实属于 big-o(4n)。 是 对于 n 的任何值,这都不正确。 这是正确的证明方式吗?
【问题讨论】:
常数不会影响O 的时间复杂度。
我的意思是O(2*n) = 2*O(n) = O(n)。
如果2n+1 在O(4n) => 2n+1 在O(n)。
因为lim(n->infinite)(2n+1)/n = 2 是一个有限数 => 2n+1 在O(n) 中。
【讨论】:
f(n) / g(n) 是有限的(2n+1/n)=> f(n) 在 O(g(n)) 中(2n+1 在 O(n) 中)。这种方法只是包含c的定义的另一种形式。
根据定义,如果有一个c 常量为f(n) <= c*g(n) 成立,那么f(n) 属于g(n)。
所以确实,(2n+1) 属于 O(4n) 因为有常量 1 和 4 持有:1*(2n+1) <= 4n <= 4*(2n+1)
(这也表明(4n)属于O(2n+1)。这是因为它们都是O(n))
【讨论】:
(1/10)*n <= 1*(2n+1) <= 4n <= 4*(2n+1) <= 10*n 所以这两个函数都是O(n)
1*(2n+1) <= 4n。有时,要确信某个常数保持不等式并证明不等式需要使用极限并不是很简单
没有最好的常数。正如您所观察到的,2 无法正常工作。但是,对于每个epsilon > 0,常量2 + epsilon 都可以使用。这通常可以通过扩展极限的定义来证明。当n 趋于无穷时,f(n)/g(n) 的极限接近c 的条件是,对于每个epsilon > 0,存在n0,这样,对于所有n > n0,我们有|f(n)/g(n) - c| < epsilon,这意味着f(n)/g(n) < c + epsilon,这意味着f(n) < (c + epsilon) g(n)。由此可知f(n) 是O(g(n)),大O 常数为c + epsilon。
【讨论】:
f(n) 是O(g(n)),同样有效的是,对于所有足够大的n,证明f(n) <= 3 g(n) 或f(n) <= 100000000000 g(n),或...