双嵌套循环的复杂性

时间:2015-08-12 17:52:01

标签: algorithm performance time-complexity

以下代码片段的最坏情况运行时间的增长顺序是N的函数是什么?

int cnt = 0;
for (int i = 1; i <= N; i = i*4)
    for (int j = 0; j < i; j++)
            { cnt++; }

我现在举例说,第一个循环执行〜log(4, N)次,第二个循环执行〜N次。但如何结合这种知识找到答案?

找到这种复杂性的一般方法是什么? 也许,我们需要知道内循环体执行多长时间? 例如1 + 4 + 16 + 64 + ... + N

2 个答案:

答案 0 :(得分:2)

几何级数= (x^n - 1)/(x-1)其中n=Log(4,N),结果为

(x^log(x, N) - 1)/ (x-1) = (4N - 1)/3

答案 1 :(得分:-1)

让N属于区间[4 ^ k; 4 ^(k + 1)),然后我们得到了总和:

和4 ^ i,i = 0..k =(4 ^(k + 1)-1)/ 3 = O(n)

我迟到了几分钟而且是...... ...