计算大O表示法

时间:2015-12-06 01:39:03

标签: algorithm pseudocode notation

我目前有以下伪代码,我想弄清楚为什么问题的答案是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)?

2 个答案:

答案 0 :(得分:1)

这是因为第二个循环以恒定的操作量运行(不依赖于n)。从n/32n,其行程n/3类似于1/32,行程为1/3

对于合理n(非0),这将运行5-6次(数字不重要,取决于您如何计算/

答案 1 :(得分:1)

内循环以n的倍数递增,而不是递增1,因此其运行时间以常量(6?)为界。因此,总步数受n的常数倍(即6 n)限制。