使用迭代替换查找多次重复的运行时

时间:2015-10-12 01:31:17

标签: algorithm runtime iteration substitution

我试图使用迭代替换来找到以下重现的运行时:

T(n) = T(n/2) + T(n/3) + n

问题在于,有两个T(n/x)术语,并且发现此案例的一般形式已证明非常具有挑战性。 对于像这样的案例,是否应该遵循一般指导方针使用迭代替换?

2 个答案:

答案 0 :(得分:1)

此重现来自Akra–Bazzi次重复。按照公式,解决方案是:

enter image description here enter image description here

或者,假设T(1) = c0您可以通过归纳证明T(n) <= max(6,c0)*n

您也可以使用替换规则。方法如下:

T(n) = T(n/2)+T(n/3) + n = 
= n+(n/2+n/3)+T(n/(2*2))+T(n/(2*3))+T(n/(3*2))+T(n/(3*3))
= n+(n/2+n/3)+(n/(2*2)+n/(2*3)+n/(3*2)+n/(3*3))
             +T(n/(2*2*2))+T(n/(2*2*3))
             +T(n/(2*3*2))+T(n/(2*3*3))
             +T(n/(3*2*2))+T(n/(3*2*3))
             +T(n/(3*3*2))+T(n/(3*3*3))=
...
= n * (1 + 5/6 + (5/6)^2 + (5/6)^3 + (5/6)^4 + ...)
= 6 * n (assuming n = 2^k3^k. you get < 6*n otherwise)

答案 1 :(得分:0)

这里没有正式的,但是

T(n) = 2T(n/2) + n // O(nlog(n))

所以你的复发可能仍然是O(nlog(n))?

基本案例是什么?