繁体   English   中英

递归 2T(n-1)+O(n) 的时间复杂度是多少?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM