簡體   English   中英

T(N) = 2T(N − 1) + N 的大 O,T(1) = 2

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

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