2017-04-24 42 views
1
int sum = 0; 
for (int i = 0; i*i < N; i++){ 
    for (int j = 0; j*j < 4*N; j++){ 
     for (int k = 0; k < N*N; k++){ 
       sum++; 
     } 
    } 
} 

我知道這個代碼段的增長順序是N^3。但是我需要對此進行適當的解釋。這個代碼段的增長順序是什麼?解釋一點點

+0

一樣簡單計數操作?從外部循環到內部循環。 'SQRT(N)* SQRT(N)* N^2 - > N R個3' –

+1

這不是一個重複。最重要的是** **櫃檯是獨立的**。在另一個問題中,情況並非如此。 **只有這樣纔有可能將結果乘以**。 – maraca

回答

2

我知道這個代碼段的生長順序是N^3

是的,你說得對。

執行總數是sqrt(N) * sqrt(4 * N) * (N^2)這是 -

sqrt(N) * sqrt(4 * N) * (N^2) 
=> 2 * sqrt(N) * sqrt(N) * (N^2) 
=> 2 * N * (N^2) 
=> 2 * (N^3) 
=> O(N^3) 
+0

這是永遠不變的...我首先回答並給出更詳細的解釋,爲什麼你可以大量繁殖,而後者的回答得到acccepted多upvotes,這是荒謬的。 – maraca

+0

嗨@mar​​aca,我沒有注意到你的答案,直到我貼我的答案,這幾乎是在幾秒鐘的差別,甚至沒有分。這些事發生在我身上了很多次,它真的令人沮喪。我高調你的回答:) –

1

可以分析迴路一步一步,因爲計數器是彼此獨立的:

  1. 外環:執行SQRT(N)次。

  2. 中循環:執行SQRT(4 * N)= 2 * SQRT(N)次。

  3. 內環:執行N^2倍。

  4. 乘以結果:sqrt(n)* 2 * sqrt(n)* n^2 = 2 * n^3。

因此遵循O(n^3)。