![](/img/trans.png)
[英]Can I apply the properties of big-O on f(n) in the case of T(n)=O(n^f(n))?
[英]Big-O for T(N) = 2T(N − 1) + N, T(1) = 2
如何為此獲得big-O
?
T(N) = 2T(N − 1) + N, T(1) = 2
我得到了兩種答案O(2^N)
或O(N^2)
,但我不確定如何正確解決它
將T(N)
除以2^N
並命名結果:
S(N) = T(N)/2^N
從T(N)
的定義我們得到
S(N) = S(N-1) + N/2^N (eq.1)
意味着S(N)
增加,但很快收斂到一個常數(因為N/2^N -> 0
)。 所以,
T(N)/2^N -> constant
或者
T(N) = O(2^N)
詳細證明
在下面的評論中,Paul Hankin 建議了如何完成證明。 取 eq.1 和從N=2
到N=M
sum_{N=2}^M S(N) = sum_{N=2}^M S(N-1) + sum_{N=2}^M N/2^N
= sum_{N=1}{M-1} S(N) + sum_{N=1}^{M-1} (N-1)/2^{N-1}
因此,在取消索引為N = 2
, 3
, ..., M-1
,我們得到
S(M) = S(1) + sum_{N=1}^M N/2^N - M/2^M
並且由於右側的級數收斂(因為對於已知收斂的N>>1
,其項以1/N^2
為界), S(M)
收斂到一個有限常數。
這是一道數學題,Leandro Caniglia 是對的。
讓 b(n) = T(n) / 2^n
因此 b(n) = b(n-1) + n / 2^n = b(n-2) + n / 2^n + (n-1) / 2^(n-1) ....
對於每個整數 i,i / 2^i 都小於 1
所以它們的總和有極限並且必須小於某個常數。
因此 b(n) < C。
因此 T(n) < 2^n * C。
很明顯,T(n) >= 2^n。
所以 T(n) 是 O(2^n)
通過在等式中插入答案來檢查。
2^N = 2.2^(N-1) + N = 2^N + N
或者
N^2 = 2 (N-1)^2 + N
只保留主要術語,你有
2^N ~ 2^N
或者
N^2 ~ 2 N^2.
得出結論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.