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

时间:2018-03-05 16:40:35

标签: algorithm recursion big-o

如何获取 big-O

T(N) = 2T(N − 1) + N, T(1) = 2

我有两种答案 O(2^N) O(N^2) ,但我不确定如何正确解决它

3 个答案:

答案 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=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 = 23,...,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 

由此得出结论