嵌套for循环的时间复杂度j< = i condition

时间:2016-09-28 20:27:20

标签: time-complexity big-o

我对作业有这个问题。

确定嵌套循环的时间复杂度

for(int i=1; i<=n; i=2*i){
    for(int j=1; j<=i; i=2*j){
        stuff
    }
}

我明白,随着i和j增加2倍,复杂性将成为log2(n)* log2(n)的行,但是内部循环运行到i而不是n我完全丢失了

我需要知道嵌套循环的复杂性以及如何解决它的一步一步。

2 个答案:

答案 0 :(得分:2)

内部循环运行log(i) + 1次(日志库2)。

添加外部循环,将上面的内容加到i = 1, 2, 4, ... n

所以:(log(1) + 1) + (log(2) + 1) + (log(4) + 1) + ... + (log(n) + 1)

是:1 + 2 + 3 + ... + log(n)

使用算术系列的总和是:(log(n) + 1) * (log(n) + 2) / 2 = (log(n)*log(n) + 3log(n) + 2) / 2 = O(log(n) * log(n))

答案 1 :(得分:0)

我们假设n = 16,例如,我将得到值i = 1, 2, 4, 8, 16

所以:我基本上把值作为log(n),即log(16),即五次迭代。

现在对于j的值,它的值为log(1) + log(2) + log(4) + log(8) + log(16)。它基本上等于每次迭代中的log(i)。

因此,结合我们从上述两个语句中得到的值,我们可以说上面代码的时间复杂度为O(log(n) * log(i))

这是我对代码的理解。