【问题标题】:How to Prove Asymptotic Notations如何证明渐近符号
【发布时间】:2012-01-16 23:39:12
【问题描述】:

我要证明下面的说法

2^(⌊lg n⌋+⌈lg n⌉)∕n ∈ Θ(n)

我知道要证明这一点,我们必须找到常量 c1>0c2>0n0>0 使得

c1.g(n) <= f(n) <= c2.g(n) for all n >= n0

换句话说,我们必须证明f(n) &lt;= c.g(n) and f(n) &gt;= c.g(n)

问题是如何证明左手边(2^(⌊lg n⌋+⌈lg n⌉)∕n)

谢谢

【问题讨论】:

  • 这个问题是否受到家庭作业的启发?如果是这样,请添加 [homework] 标签。
  • 证明一个陈述是什么意思> 只有定理才有证明,那是什么定理?

标签: algorithm big-o notation


【解决方案1】:

您可以从扩展指数开始。它等于 n1*n2/n,其中 n1n 和 n*2>n2。其余的应该很容易。

【讨论】:

  • 能否请您给我更多关于如何扩展 ⌊lg n⌋+⌈lg n⌉ 的解释?
  • @MR.NASS 不要展开日志,而是展开指数。这里 n1 和 n2 是 n 的上限和下限。
【解决方案2】:

这是上界的推导:

2^(⌊lg n⌋+⌈lg n⌉)/n
= 2^(2⌊lg n⌋+1)/n 
<= 2^(2 lg n + 1)/n
= 2^(2 lg n) 2^(1) / n
= 2 n^2 / n
= 2 n
= O(n)

所以我们知道你的函数可以以 2*n 为界。现在我们做下限:

2^(⌊lg n⌋+⌈lg n⌉)/n
= 2^(2⌈lg n⌉ - 1) / n
>= 2^(2 lg n - 1)/n
= 2^(2 lg n) 2^(-1) / n
= 1/2 n^2 / n
= 1/2 n
= O(n)

我们现在知道您的函数可以以 n/2 为界。

在 gnuplot 上检查;这些答案看起来又好又紧。这是使用定义 if floor() 和 ceiling() 函数的纯代数解决方案。

【讨论】: