我运行程序来找到n + 1和2 ** ceil(log2(n + 1))之间的差异,其中n是2的幂。它呈指数级增长
因此,根据Big-O的定义,没有常数c'这样 -
2^(2^ceil(log2(n))) <= c' * 2^n
因此
(2^(2^ceil(log2(n)))) != O( 2^n )
上述陈述是否正确?如果是的话,我该如何证明呢?
答案 0 :(得分:3)
我们需要证明,对于每个常数c,存在n使得2 ^(2 ^ ceil(log2(n)))> c * 2 ^ n。对于某些整数k,我们只考虑n = 2 ^ k + 1> 1;这是我们的权利,因为我们并没有试图证明所有n的陈述。期望的不平等变为
2^(2^ceil(log2(2^k + 1))) >? c * 2^(2^k + 1).
我们简化了左侧。
ceil(log2(2^k + 1)) = k + 1
2^(2^ceil(log2(2^k + 1))) = 2^(2^(k + 1)).
期望的不平等是
2^(2^(k + 1)) >? c * 2^(2^k + 1).
这种不平等等同于
2^(2^(k + 1) - 2^k - 1) = 2^(2^k - 1) >? c.
2^k - 1 >? log2(c)
2^k >? log2(c) + 1
k >? log2(log2(c) + 1).
k(以及n)的选择现在很明显;通过不等式向后工作以显示所需的不等式,因此函数不是O(2 ^ n)。
答案 1 :(得分:0)
2 ^(2 ^ ceil(log2(n)))&lt; 2 ^(2 ^(log2(n)+1))= 2 ^(2n)