簡體   English   中英

計算 big-o 嵌套循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM