我正在阅读算法介绍中的递归树方法,当我尝试应用它时,发现一些不一致之处,如下所示:
要计算T(n) = 3T(n/4) + c*n^2
,本书提供了解决方案:Picure from the book Picture from the book。以我的理解,我们应该首先计算每个级别的成本,除了最低级别(T(1)=Θ(1))之外。然后,我们将T1 *(叶节点数)加到先前的总和中,以获得最终结果。
但是,当我尝试将此技术应用于另一项练习时,书中出现了一些问题,就会发生一些问题。
要计算T(n) = T(n/2) + T(n/4) + T(n/8)
的上限,在绘制递归树后,我们看到i
级别的成本为(7/8)^i * n
,并且要得到最终答案,我们要做{ {1}}(由于我们正在计算上限,因此我基于2计算对数)。
但是,http://sites.math.rutgers.edu/~ajl213/CLRS/Ch4.pdf此处的解决方案使用了不同的方法。也就是说,它不会像对待其他级别一样对待最低级别,而只是计算(n +(7/8)*n + (7/8)^2 * n + (7/8)^3 * n + ... + (7/8)^( (log2(n)-1 )) ) + Θ( 3^(log2(n) ) = Θ( n^(log2(3) )
并获得最终答案,我们执行(7/8)^i * n
。
因此,总而言之,问题在于两种方法之间的不一致。而且我发现在我提供的第一个示例(n +(7/8)*n + (7/8)^2 * n + (7/8)^3 * n + ... + (7/8)^(log2(n) ) ) = Θ( n )
中,两种方法都给出了相同且正确的答案,但在第二个示例T(n) = 3T(n/4) + c*n^2
中却没有。有人可以指出我的错误或误解在哪里吗?
很抱歉,问题很长,我仍然不能直接在问题中加入图片。谢谢您的宝贵时间!