当函数中有一个ceil时,如何找到渐近复杂度? (2 ^(2 ^ ceil(log2(n))))= O(2 ^ n)?

时间:2017-01-23 16:09:59

标签: algorithm asymptotic-complexity

我运行程序来找到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 )

上述陈述是否正确?如果是的话,我该如何证明呢?

2 个答案:

答案 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)