我有log n但它不是log n它是log(log n)
但是为什么?
int function(int n){
return aux(n , 2)
}
int aux(int n, int x){
while (n<x) {
x *= x;
}
return x;
}
功能的复杂性是什么?
答案 0 :(得分:1)
非常确定循环条件应该是n > x
所以我将在这个答案中假设它。
首先,观察x
:
x1 = x0 * x0
= 2 * 2
= 2^2
x2 = x1 * x1
= x0 * x0 * x0 * x0
= 2 * 2 * 2 * 2
= 2^4
x3 = x2 * x2
= x1 * x1 * x1 * x1
= x0 * x0 * x0 * x0 * x0 * x0 * x0 * x0
= 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
= 2^8
我们看到指数正在增长为2^t
,其中t
是循环中的迭代次数,因此我们可以获得x
的闭式表达式:
x = 2^(2^t)
然后我们可以求解迭代次数t
:
n > x
=> n > 2^(2^t)
=> log(n) > 2^t
=> log(log(n)) > t
根据要求。