[英]What is the time complexity of recurrence 2T(n-1)+O(n)?
T(n) = 2T(n-1) + O(n) 的渐近复杂度是多少? 我想它是使用替换方法解决的..如何解决这种重复问题? 您可以假设算法在达到 T(1) 时停止。
这里不能使用主定理,因为尺寸收缩因子 b (=(n-1)/n) 基本上等于 1。
但是,如果计算前几项,则可以很容易地看到时间复杂度为 2**n:
T(1) = 1 = 1
T(2) = 2*1 + O(n) = 2 + O(n)
T(3) = 2*(2*1 + O(n)) + O(n) = 2**2 + 3O(n)
T(4) = 2*(2*(2*1 + O(n)) + O(n)) + O(n) = 2**3 + 7O(n)
: : : : : : : : :
T(n) = 2**(n-1) + O(n) * (2**(n-1)-1) ≈ O(2**n)
替换方法有一个技巧。 如果你尝试直接的方法,你会得到
T(n) <=? 2^n
T(n) = 2 T(n-1) + cn
<= 2^(n-1) + 2^(n-1) + cn
= 2^n + cn,
不小于或等于2^n
。 解决方案并不直观:减去一个低阶项。 省略一些摆弄以获得正确的,
T(n) <=? d 2^n - cn - 2c
T(n) = 2 T(n-1) + cn
<= 2 (d 2^(n-1) - c (n-1) - 2c) + cn
= d 2^n - cn - 2c,
并设置d
以覆盖基本情况。 (鉴于您想要大 O,您甚至不需要非常准确地猜测正确的术语。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.