我目前有以下伪代码,我想弄清楚为什么问题的答案是O(n)。
sum = 0;
for (i = 0; i < n; i++) do
for (j = n/3;j < 2*n; j+= n/3) do
sum++;
我认为答案是O(n ^ 2),因为第一个for循环将运行'n'次,而第二个for循环有+ = n / 3,给它另一个(n除以某个时间),只会简化为O(n ^ 2)。有人可以解释为什么它是O(n)?
答案 0 :(得分:1)
这是因为第二个循环以恒定的操作量运行(不依赖于n
)。从n/3
到2n
,其行程n/3
类似于1/3
到2
,行程为1/3
。
对于合理n
(非0),这将运行5-6次(数字不重要,取决于您如何计算/
)
答案 1 :(得分:1)
内循环以n
的倍数递增,而不是递增1,因此其运行时间以常量(6?)为界。因此,总步数受n
的常数倍(即6 n
)限制。