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。但是我需要對此進行適當的解釋。這個代碼段的增長順序是什麼?解釋一點點
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。但是我需要對此進行適當的解釋。這個代碼段的增長順序是什麼?解釋一點點
我知道這個代碼段的生長順序是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)
這是永遠不變的...我首先回答並給出更詳細的解釋,爲什麼你可以大量繁殖,而後者的回答得到acccepted多upvotes,這是荒謬的。 – maraca
嗨@maraca,我沒有注意到你的答案,直到我貼我的答案,這幾乎是在幾秒鐘的差別,甚至沒有分。這些事發生在我身上了很多次,它真的令人沮喪。我高調你的回答:) –
可以分析迴路一步一步,因爲計數器是彼此獨立的:
外環:執行SQRT(N)次。
中循環:執行SQRT(4 * N)= 2 * SQRT(N)次。
內環:執行N^2倍。
乘以結果:sqrt(n)* 2 * sqrt(n)* n^2 = 2 * n^3。
因此遵循O(n^3)。
一樣簡單計數操作?從外部循環到內部循環。 'SQRT(N)* SQRT(N)* N^2 - > N R個3' –
這不是一個重複。最重要的是** **櫃檯是獨立的**。在另一個問題中,情況並非如此。 **只有這樣纔有可能將結果乘以**。 – maraca