以下代码片段的最坏情况运行时间的增长顺序是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
答案 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)
我迟到了几分钟而且是...... ...