int y = 1;
for (int x = 1 ; x <= n+2 ; x++)
for (int w = n ; w > 0 ; w--)
y = y + 1;
我对确定上述代码的BigO感到困惑。如果在最外层循环中它是(int x = 1; x&lt; = n; w ++),则循环的BigO将是O(n ^ 2),因为最外层循环将迭代n次并且最内层循环将也迭代了n次。
然而,鉴于最外层循环迭代n + 2次,是否会改变bigO或添加常数无关紧要的规则?最后,如果最里面的循环迭代n + 2次而不是n?
,它会改变什么谢谢!
答案 0 :(得分:1)
for (int x = 1 ; x <= n+2 ; x++)
外环是(n + 2)次。
for (int w = n ; w > 0 ; w--)
内环是(n)时间
((n+2) * n)
=&gt; n^2 + 2n
=&gt; O(n^2)
。因为我们考虑的是较大的值。
原因是
n
的值越大,2n
的值对n^2
无关紧要。我们放弃了n
。
您可以在此处阅读更多说明:Big O Analysis
答案 1 :(得分:1)
长期答案很短,添加剂常数无关紧要。
假设我们确实计算了常数。然后,执行内循环
(n+2)(n) = n^2 + 2n
次。这仍然是O(n^2)
,因为平方项优先于线性项。
答案 2 :(得分:1)
n和n + 2是相同的数量级,因此该代码在O(n ^ 2)中运行。 即使内循环运行n + 2次。