我有一个伪代码,我正在尝试进行详细分析,分析运行时和渐近分析:
sum = 0
i = 1
while (i ≤ n){
sum = sum + i
i = 2i
}
return sum
我的作业要求我为每一行编写成本/运行时,将它们加在一起,并找到运行时的Big-Oh表示法。我的分析目前看起来像这样:
sum = 0 1
long i = 1 1
while (i ≤ n){ log n + 1
sum = sum + i n log n
i = 2i n log n
}
return sum 1
=> 2 n log n + log n + 4 O(n log n)
这是对的吗?另外:我应该在while循环中使用n ^ 2吗?
答案 0 :(得分:1)
由于整数运算,运行时是
O(floor(ln(n))+1) = O(ln(n)).
让我们逐步完成您的伪代码。考虑n = 5的情况。
iteration# i ln(i) n
-------------------------
1 1 0 5
2 2 1 5
3 4 2 5
通过检查,我们看到了
iteration# = ln(i)+1
总结如下:
sum = 0 // O(1)
i = 1 // O(1)
while (i ≤ n) { // O(floor(ln(n))+1)
sum = sum + i // 1 flop + 1 mem op = O(1)
i = 2i // 1 flop + 1 mem op = O(1)
}
return sum // 1 mem op = O(1)