[英]Calculating big-o, nested loops
我有一個關於這些嵌套循環的快速問題:
for(int i = 0; i < N; i++) {
for(int j = 0; j < i; j++)
for(j = i; j < N; j = j/2)
}
我在這里看到第一個循環我們 go O(N) 次,第二個我們 go O(N) 次,最后我們看到 go O(log n)。 說這加起來是 O(N) 是錯誤的嗎?
這是一個無限循環而不是j/2我認為它應該是j*2
正如評論中所建議的那樣,現在這是 O(infinity),因為第三個循環永遠不會停止,所以假設你打算編寫這段代碼
for(int i = 0; i < N; i++) {
for(int j = 0; j < i; j++)
for(k = i; k < N; k = k*2)
}
在這種情況下,第一個和第二個循環將是 O(N),第三個循環將是 O(log(N)),但由於循環是嵌套的,因此代碼的總復雜度將是
O(N*N*log(N)) = O(N^2 * Log(N))
如果您對我的回答有任何疑問,請隨時在評論中提問,如果我的評論對您有所幫助,請考慮將其標記為答案或投票:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.