这个算法在n方面的复杂性是多少?

时间:2018-03-31 08:09:31

标签: c++ while-loop time-complexity

在以下算法中,循环以i的前一个值的平方增加, 这个算法的复杂性是什么?

#include<iostream>
using namespace std;
int main(){
    int i=2;
    while(i<=n){
        cout<<"Something"<<endl;
        i=(i*i);
    }
    return 0;
}

1 个答案:

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