我试图使用迭代替换来找到以下重现的运行时:
T(n) = T(n/2) + T(n/3) + n
问题在于,有两个T(n/x)
术语,并且发现此案例的一般形式已证明非常具有挑战性。
对于像这样的案例,是否应该遵循一般指导方针使用迭代替换?
答案 0 :(得分:1)
此重现来自Akra–Bazzi次重复。按照公式,解决方案是:
或者,假设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))?
基本案例是什么?