递归方程

时间:2017-10-18 18:18:53

标签: algorithm recursion asymptotic-complexity

我有这个递归方程式: T(n)= T(n / 2)+ T(n / 5)+ T(n / 9)+Θ(n)

我像这样绘制递归树:

          cn
     /     |     \
   n/2    n/5    n/9
  / | \  / | \  / | \
  ..................

树有log(n)+ 1个级别,每个级别的节点数比上面的级别多3倍,子问题大小每次减少2倍。现在这就是我看到的总成本:

enter image description here

我忘了这样说:我的解决方案是否正确?

1 个答案:

答案 0 :(得分:1)

假设我们有一个更一般的关系:

enter image description here

其中f(n)是某种功能,例如cn

如果我们将这个关系重新替换为自身,即每个递归调用,则生成的下一层递归调用将使其参数乘以相应的因子:

enter image description here

如果我们继续,模式由这个表达式给出:

enter image description here

...即Trinomial expansion。每个T项的系数由三项式系数给出,而参数由λμν的不同幂给出:

enter image description here

正如您从扩展中看到的那样,f - 术语在T - 术语后面是一个递归级别。因此,所有f条款的总和,考虑到它们必须累积,而不是T - 条款:

enter image description here

以上所有内容均可通过归纳进行验证,并且可归于任何次递归调用。

我们什么时候终止,即摆脱T条款?正如我在评论中所说,当递归到达最长路径的末尾时。这是通过考虑最慢的减少期限(正如你正确推断)给出的:

enter image description here

  

因此,时间复杂度函数的最紧密的封闭形式是   由下式给出:

     

enter image description here

如果f(n)具有n的某种力量,则很容易评估。

例如,f(n) = Θ(n), α = β = γ = 1, λ = 2, μ = 5, ν = 9。因此:

enter image description here

括号内的术语正好之前的三项式扩展。因此:

enter image description here

τ < 1开始,指数项就会消失。因此T(n) = O(n)

数值测试证实了这一点:

n         T(n)
-----------------------------
10        21.86111111
100       328.1442901
1000      3967.333431
10000     44150.87621
100000    471262.9357
1000000   4910520.041
10000000  50415530.84

log-log T(n)针对n的情节:

enter image description here

渐变为1.054 ± 0.01166,非常接近1的理论值,因此强烈支持T(n) = O(n)的结果。