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