在以下算法中,循环以i的前一个值的平方增加, 这个算法的复杂性是什么?
#include<iostream>
using namespace std;
int main(){
int i=2;
while(i<=n){
cout<<"Something"<<endl;
i=(i*i);
}
return 0;
}
答案 0 :(得分:0)
答案是log(log n)
它是这样的:
a0 = 2
a1 = 2 * 2 = 4
a2 = 4 * 4 = 16
a3 = 16 * 16 = 256
...
一般而言,这是:
ai = 2 ^ (2 ^ i) where ^ is the power function
现在我们解决
n = 2 ^ (2 ^ i)
for i给出了
i = log(log(n)/log(2))/log(2)
然后用大O表示法替换常量1(即log(2) - > 1)。
i ~ log(log(n))
所以我们需要约。 log(log(n))循环所以我们有
O(n) = log(log(n))