2015-10-07 47 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)