我有这个递归方程式: T(n)= T(n / 2)+ T(n / 5)+ T(n / 9)+Θ(n)
我像这样绘制递归树:
cn
/ | \
n/2 n/5 n/9
/ | \ / | \ / | \
..................
树有log(n)+ 1个级别,每个级别的节点数比上面的级别多3倍,子问题大小每次减少2倍。现在这就是我看到的总成本:
我忘了这样说:我的解决方案是否正确?
答案 0 :(得分:1)
假设我们有一个更一般的关系:
其中f(n)
是某种功能,例如cn
。
如果我们将这个关系重新替换为自身,即每个递归调用,则生成的下一层递归调用将使其参数乘以相应的因子:
如果我们继续,模式由这个表达式给出:
...即Trinomial expansion。每个T
项的系数由三项式系数给出,而参数由λμν
的不同幂给出:
正如您从扩展中看到的那样,f
- 术语在T
- 术语后面是一个递归级别。因此,所有f
条款的总和,考虑到它们必须累积,而不是T
- 条款:
以上所有内容均可通过归纳进行验证,并且可归于任何次递归调用。
我们什么时候终止,即摆脱T
条款?正如我在评论中所说,当递归到达最长路径的末尾时。这是通过考虑最慢的减少期限(正如你正确推断)给出的:
因此,时间复杂度函数的最紧密的封闭形式是 由下式给出:
如果f(n)
具有n
的某种力量,则很容易评估。
例如,f(n) = Θ(n), α = β = γ = 1, λ = 2, μ = 5, ν = 9
。因此:
括号内的术语正好之前的三项式扩展。因此:
从τ < 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
的情节:
渐变为1.054 ± 0.01166
,非常接近1
的理论值,因此强烈支持T(n) = O(n)
的结果。