簡體   English   中英

如果是其他遞歸最差的時間復雜性

[英]if else recursion worst time complexity

我很難找出下面代碼中最糟糕的時間復雜度。
(這不是作業,請參閱https://leetcode.com/problems/integer-replacement/description/ 。)

int recursion (int n) {
    if (n == 1)
        return 0;
    if (n % 2 == 0) {
        return recursion(n/2) + 1
    } else {
        return min(recursion(n / 2 + 1) + 1, recursion(n - 1)) + 1;
   }
}

我唯一知道的是當N == 2 ^ k(k > 0) ,最差的時間復雜度是O(logN) 但是,我不清楚N何時不是2^k 因為偶數number / 2仍然可以得到奇數。 有人說它仍然是O(LogN) ,但我不相信。

我知道代碼不是最佳解決方案,只是想分析時間復雜度。 我試過遞歸樹和聚合分析,似乎沒有幫助。

如果n是偶數,我們知道T(n) = T(n/2) + 1 ,如果n是奇數,我們知道T(n) = T(n/2 + 1) + T(n-1) + 1 在后一種情況下,由於n是奇數,我們知道n-1必須是偶數。 如果n/2 + 1是偶數T(n) = T(n/4) + T(n/2) + 3並且如果n/2 + 1是奇數T(n) = 2*T(n/4) + T(n/2) + 3

從上面的討論中,在最壞的情況下T(n)是基於定義的T(n/2)T(n/4)在一般情況下。 Akra-Bazzi定理我們可以說, T(n) = O(n^((log(1+sqrt(5))-log(2))/log(2))) ~ O(n^0.69) (從第一種情況來看)和第二種情況下的T(n) = O(n) (其中n/2 + 1是奇數)。

但是,對於更緊湊的復雜性,我們應該在分析中仔細檢查。

暫無
暫無

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

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