如果我有以下算法
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)。
我不确定如何继续。
答案 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)。