算法复杂度与迭代。是对数还是指数?

时间:2019-03-22 17:40:25

标签: c time-complexity

如果我有以下算法

for (i = 1; i <= 4 * n; i = i * 4) {
   for (k = 1; k < 1000; k = 2 * k) {
       print(k);
   }
   print(i);
}

如何计算其复杂度? 我只了解对于for(i=1; i≤4n; i=i*4)的一次迭代,print(i)的行是O(1),对于for(k=1; k<1000; k=2*k)的一次迭代,print(k)的行是O( 1)。

我不确定如何继续。

1 个答案:

答案 0 :(得分:3)

这是内循环:

for(k=1; k<1000; k=2*k) {
    print(k);
}

该循环是恒定时间,因为没有自由变量。总是会print准确地呼叫k ∈ {1,2,4,8,16,32,64,128,256,512} 9次。

外部循环为O(log n),因为它将执行“ log” 4n次。

总体而言,您发布的程序片段(如果我们添加了省略的最后一个大括号)为O(log n)。