如果要转载,需要注明出处: http://blog.csdn.net/xiazdong
在算法导论第三版中将算法导论第二版的“递归式”章节改为了“分治法”,而且加入了“Maximum Subarray”和“strassen矩阵计算”两个问题。
本文依然会在讲解中穿插一些习题,以更好地理解分治法。
一、递归式介绍
分治法其实在很多地方都会看到,比如归并排序、快速排序等都是运用分治法解决。
而每个分治法问题通常都能够用“递归式”表示。
比如归并排序的递归式如下:
当然一般的书中通常都会写成:
这样写的原因是简化思想,即后一种表示假设“n是2的幂次”。并且这两种表示的结果都是一样的。
递归式要注意:
一定不要忘了边界条件,即n=1时的T(1)值,虽然通常来说T(1)=1。
递归式的性质:
现在我们来证明这个结论:第一个递归式和第二个递归式的结果一样。
第二个递归式通过主定理就能够得出,因此不证明了。
第一个递归式我们用代换法验证。
第一步:证明T(n)=<