嵌套for循环的大O.

时间:2015-10-07 16:56:44

标签: java loops for-loop big-o nested-loops

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?

,它会改变什么

谢谢!

3 个答案:

答案 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次。