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)
这是正确的吗?
答案 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的正式步骤如下: