2015-10-07 46 views
0
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 < = n; w ++),那么循环的BigO将是O(n^2),因为最外层的循环会迭代n次,最内层的循环也会迭代n次。嵌套for循环的大O

但是,假设最外面的循环迭代n + 2次,那么这会改变bigO还是遵循加法常量无关紧要的规则?最后,如果最内层的循环迭代n + 2次而不是n,它会改变什么吗?

谢谢!

+0

因为'N'趋于无穷大,一个'+ 2'迅速变无关。当'n'变为无限时,你正在采用'(n + 2)*(n)'的极限,它等于'n^2 + 2n'。 –

回答

1
for (int x = 1 ; x <= n+2 ; x++) 

外环为(n + 2)次。

for (int w = n ; w > 0 ; w--) 

内环是(n)的时间

((n+2) * n) =>n^2 + 2n =>O(n^2)。因为我们考虑更大的价值。

的理由是为了n较大值,的2n值将是微不足道的n^2。所以我们放弃了n

你可以在这里阅读更多的解释:Big O Analysis

+0

在((n + 2)* n)乘法运算中,(n + 2)中的2是否因为加法常数无关规则而下降? –

+0

@MikeNeal因为它小于n^2而下降。只考虑最大值。 – YoungHobbit

+0

@MikeNeal当你考虑更大的值时,那么2n将会小于n^2。所以它不会影响很多复杂性。 – YoungHobbit

1

龙十岁上下的回答简短,添加剂常量并不重要。

假设我们计算了常数。然后执行内循环

(n+2)(n) = n^2 + 2n 

次。这仍然是O(n^2),因为平方项优先于线性项。

1

n和n + 2是相同的数量级,所以这段代码在O(n^2)中运行。 即使内循环运行n + 2次。

3

外环运行n + 2次,内循环运行n倍,所以码块运行(n + 2) * n倍,这是n * n + 2 * n次。随着n增加值时,2 * n变得微不足道,所以你留下了n * n,给你答案:为O(n^2)