第二章 递归与分治策略
1.算法总体思想
将一个难以直接求解问题分解成足够小的子问题,直到很容易求出其解为止。
2.递归函数的两个要素:
边界条件
递归函数
3.典型问题
兔子繁殖
斐波那契数列
Ackerman函数(双递归函数)
4.当算法复杂度很高时(如:阶乘),计算机运行能力对运行时间的提高效果越来越不明显。
所以 提高算法的效率显得很重要
5.递归算法的优缺点分析:
(可解决斐波那契数列进行分析)
优:结构清晰,归纳法可证明其正确性
缺:运行效率低,耗费时间,占用存储空间
解决办法:用递推实现递归
6.分治法步骤:
分解
递归求解
合并(不一定需要,如二分搜索)
7.分治法计算效率分析
主方法
8.大整数乘法
思路:将大整数分段,通过替换减少乘法的次数来提高算法的效率。
9.Strassen矩阵乘法
思路:将大矩阵分解成分块矩阵,通过替换减少矩阵乘法的运算次数来提高算法的效率。
10.棋盘覆盖
思路:将2k × 2k棋盘分解成4个2k-1 × 2k-1棋盘,用一个L型骨牌覆盖住无特殊方格的三块,递归分割就可以
11.合并排序
思路:将队列分割成相等的两段,分别排序,然后合并。(递归分割直到只剩下一个)
改进:直接两两排序,然后合并
12.快速排序
思路:大的放一边,小的放一边
13.算法之间的比较