计算成本

Bla*_*dow 2 c c++ algorithm

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

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

while (n > 2)
   n = log(n);
Run Code Online (Sandbox Code Playgroud)

IVl*_*lad 9

第二是O(log* n)这里log *重对数.

分析第一个产生这样的东西:

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)
Run Code Online (Sandbox Code Playgroud)

考虑到第一算法执行k时间(基本上,我们的次数应用sqrtn <= 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
Run Code Online (Sandbox Code Playgroud)

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