计算大O表示法

时间:2014-03-15 08:30:51

标签: c++ big-o

sum = 0;
for (i=0;i<n/2;i++)
    for (j=i; j<n/4; j++)
        sum++;

上述代码的大O是多少? 我计算了大O,但我不确定它是否正确。

这是我的回答

外部循环将运行n/2

内部循环将运行(n/4 - 1) = ((n-4)/4 )

T(n) = (n/2) * ((n-4)/4 )
     = (n^2 -4n + 16)/8
     = 1/8 n^2 - 1/2 n +2

所以大O是O(n^2)这是正确的吗?

4 个答案:

答案 0 :(得分:2)

是的,在大O计算中,领先系数和转换项被删除。

f(x) O(g(x)) f(x) <= M g(x) x x0 M M = 1/8超过某些x0 = 4且某些常数{{1}}。在这种情况下,{{1}}和{{1}}。

答案 1 :(得分:0)

检查彼此嵌套的简单for循环的大O的一种非常简单的方法是:O(n ^ (number of loops))

请注意,只有当循环的所有限制都是n的实际倍数时,上述技术才有效。

在你的问题中,内环是n / 2,外环是n / 4。两者都是n的实数倍数。所以大O将是:O(n ^ 2)

希望这会有所帮助。

答案 2 :(得分:0)

那么它是O(n ^ 2)并且如果您关心的(通常应该是)那么您是对的。但我不认为常数是1/8。

如果你想要准确,我认为它应该是:

n/4 + n/4 -1 + n/4 - 2 + ... 3 + 2 + 1 = n/4 *(n/4 + 1)/2 = n^2/32 + n/8

当i大于或等于n / 4时,内环不会运行。所以你不应该计算那部分。

答案 3 :(得分:0)

使用Sigma Notation的正式步骤如下:

enter image description here