如何证明渐近符号

时间:2012-01-16 23:39:13

标签: algorithm big-o notation

我想证明以下陈述

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) <= c.g(n) and f(n) >= c.g(n)

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

谢谢

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这是上限的推导:

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;这些答案看起来很好而且很紧。这是一个纯粹的代数解决方案,使用了floor()和ceiling()函数的定义。