计算成本

时间:2010-06-27 11:00:59

标签: c++ c algorithm

是否有人知道这两段代码的计算成本是多少?

while (n > 2)
   n = sqrt(n);

while (n > 2)
   n = log(n);

2 个答案:

答案 0 :(得分:9)

第二个是O(log* n),其中log *iterated logarithm

分析第一个产生的结果如下:

sqrt(n) = n ^ (1/2)
sqrt(sqrt(n)) = n ^ (1/4)
sqrt(sqrt(sqrt(n))) = n ^ (1/8)
...
sqrt applied k times = n ^ (1/2^k)

考虑第一个算法执行k次(基本上,我们必须应用sqrt直到n <= 2的次数。)

考虑这个推理:

n ^ (1/2^k) = p (p <= 2) | ^ (2^k)
n = p ^ (2^k) | log
log n = (2^k) log p | log
log log n = log (2 ^ k) + log log p
log log n = klog2 + log log p
=> k ~= log log n

所以第一个算法是O(log log n)

答案 1 :(得分:4)

如果在日志域中重写它,第一个答案应该变得明显:

n = log2(n);
while (n > 1)
    n = n / 2;

为了达到1,你需要将一个数字减半? O(log n)。