如何解决递归复杂度T(n)= T(n / 4)+ T(3n / 4)+ cn

时间:2014-02-26 06:45:38

标签: algorithm recursion time complexity-theory recurrence

我使用递归树解决此重现问题。每个级别的总费用为n,树的深度介于log (n) base 4log (n) base 4/3之间。直观地说,我希望解决方案最多可以是每个级别的成本乘以成本。 O(cn log (n) base 4/3) = O(n log n)。我想知道我是否解决了这个问题,我的解决方案是否正确?

2 个答案:

答案 0 :(得分:2)

这样想:对于递归树的第一个log 4 n层,这些层的工作总和将是cn,因为如果总结所有层的总大小子问题,它应该总n,所以总工作是cn。这意味着完成的工作是Ω(n log n)。

你可以通过假装在树的每一层完成的工作总和为O(n)来上限完成工作(当你在树中越来越低时,它实际上会下降,所以这是一个上限),高度为log 4/3 n。这给出了O(n log n)的工作的上界。

由于完成的工作是Ω(n log n)和O(n log n),所以完成的工作更恰当Θ(n log n)。

希望这有帮助!

答案 1 :(得分:0)

编辑:错过了OP并回答了错误的解决方案,下面是我的精心尝试

直观地说,你是对的。

对于更正式的方法,您可以用数学方法进行证明。

魔术是:Akra-Bazzi theorem这是主定理的更通用版本

对于关系T(n) = T(n/4) + T(3n/4) + cn

我们得到g(n) = cn, k = 2, a1 = a2 = 1, b1 = 1/4, b2 = 3/4

根据定理,我们必须求解a1b1^p + a2b2^p = 1的p,这显然是p = 1

然后T(n) = O(n^p * (1+integration(1/n dn))) = O(n*(1+log(n))) = O(nlogn)

符合我们的猜测