【问题标题】:Asymptotic time complexity of recursive function (Theta)递归函数的渐近时间复杂度 (Theta)
【发布时间】:2014-11-12 11:52:23
【问题描述】:

我被要求分析以下递归函数的渐近时间复杂度:

for-all k ≥ 1:
T(n) = n + T(n/2) + T(n/4) + T(n/8) + .... + T(n/2^k)

我能够证明:
T(n) = O(n⋅log n) 和 T(n) = Ω(n),
但我正在寻找更紧密的界限(Big Theta)。

【问题讨论】:

  • 您的公式看起来好像T 的表达式是无限的——对吗?
  • 函数不是无限的,因为最后一个加数是T(n/2^k)。
  • 然而 k 没有界限,正如您自己写的那样:“for-all k >= 1”
  • 是的,但我们需要针对任何给定 k 的解决方案。
  • 那么,您正在查看一个函数族 Tk,对于每个族,k 是一个常数?

标签: recursion time big-o asymptotic-complexity big-theta


【解决方案1】:

首先:
我这样理解“for-all k >= 1”:对于k = 1 到k = m 其中2<sup>m-1</sup> ≤ n ≤ 2<sup>m</sup>。
所以基本上m = log₂(n) 成立。

看看我的计算:

T(n) = n + Σk=1,...,m T(n/2k) = n + T(n/2) + Σk=2,...,m T(n/2k) = n + n/2 + 2⋅Σk=2,...,m T(n/2k) = ... = n + Σk=1,...,m k⋅n/2k = n + n⋅Σk=1,...,m k/2k = n + n⋅(2 - 2-mm - 21-m) ≤ n + 2⋅n = 3n

所以T(n) 在Θ(n) 中。

注意:
您还可以通过积分 s(m) = ∫<sub>1</sub><sup>m</sup> k/2<sup>k</sup> dk 来近似 Σ<sub>k=1,...,m</sub> k/2<sup>k</sup>。
这里lim<sub>m → ∞</sub>s(m) = 2 也成立。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2018-08-18
    相关资源
    最近更新 更多