簡體   English   中英

帶遞歸的嵌套循環的大 O 時間復雜度

[英]Big O Time Complexity of Nested Loop with recursion

以下代碼片段的時間復雜度應該是多少

void doSomething(int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            doSomeOtherStuff(n);
            doSomething(n - 1);
        }
    }
}

void doSomeOtherStuff(int n) {
    for (int i = 0; i < n; i++) {
        //did some other stuff
    }
}

復雜度計算是否為:n^2(n + n^2) = O(n^4) 是否正確? 如果不是請解釋

根據我對第一個答案的評論,我認為該算法的復雜性比 O(n^4) 差得多。 @ToddCaywood 實際上首先寫下了我腦海中的想法。 這個算法實際上是這樣的:

O(n^(n^2))

一個不可能的壞結果。 對於大型數據集,這件事將進入太空,永遠不會回來。

我第一次看到的方式是,每一級遞歸都會添加另一組 NESTED for循環。 對於n==10 ,您有 20 個嵌套的 for 循環。 隨着n增長,它只會越來越深。

是的,O(n^4) 是正確的。

doSomeOtherStuff(n)顯然是復雜度O(n),做了n次,也做了n次,所以里面的部分是O(n^3)。

記住這一點,doSomething(n) 的復雜性 [我們稱之為 T(n)] = O(n^3) + T(n-1) 其中 T(n-1) = O(n^3) + T (n-2) 等擴展到 (n-1)(O(n^3)) + O(n^3) = n(O(n^3)) = O(n^4)。

如果你需要一個正式的證明,你可以很容易地遵循上面的邏輯,在需要的地方擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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