如何获取 big-O
?
T(N) = 2T(N − 1) + N, T(1) = 2
我有两种答案 O(2^N)
或 O(N^2)
,但我不确定如何正确解决它
答案 0 :(得分: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
并且由于右边的序列收敛(因为它的术语受1/N^2
约束N>>1
已知收敛),S(M)
收敛到有限常数。
答案 1 :(得分:-1)
这是一个数学问题而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 / 2 ^ i对于每个整数i
小于1所以它们的总和有限制,必须小于某个常数。
因此b(n)<下进行。
因此T(n)< 2 ^ n * C. 显然,T(n)> = 2 ^ n。所以T(n)是O(2 ^ n)
答案 2 :(得分:-2)
通过在等式中插入答案进行检查。
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/4.0.0-rc.9/immutable.js"></script>
或
2^N = 2.2^(N-1) + N = 2^N + N
只保留主导词,你有
N^2 = 2 (N-1)^2 + N
或
2^N ~ 2^N
由此得出结论