算法知识点整理——第2章 递归与分治策略
2017-02-15 15:54
435 查看
第二章 递归与分治策略
1.算法总体思想
将一个难以直接求解问题分解成足够小的子问题,直到很容易求出其解为止。
2.递归函数的两个要素:
边界条件
递归函数
3.典型问题
兔子繁殖
斐波那契数列
Ackerman函数(双递归函数)
4.当算法复杂度很高时(如:阶乘),计算机运行能力对运行时间的提高效果越来越不明显。
所以 提高算法的效率显得很重要
5.递归算法的优缺点分析:
(可解决斐波那契数列进行分析)
优:结构清晰,归纳法可证明其正确性
缺:运行效率低,耗费时间,占用存储空间
解决办法:用递推实现递归
6.分治法步骤:
分解
递归求解
合并(不一定需要,如二分搜索)
7.分治法计算效率分析
主方法
8.大整数乘法
思路:将大整数分段,通过替换减少乘法的次数来提高算法的效率。
9.Strassen矩阵乘法
思路:将大矩阵分解成分块矩阵,通过替换减少矩阵乘法的运算次数来提高算法的效率。
10.棋盘覆盖
思路:将2k × 2k棋盘分解成4个2k-1 × 2k-1棋盘,用一个L型骨牌覆盖住无特殊方格的三块,递归分割就可以
11.合并排序
思路:将队列分割成相等的两段,分别排序,然后合并。(递归分割直到只剩下一个)
改进:直接两两排序,然后合并
12.快速排序
思路:大的放一边,小的放一边
13.算法之间的比较
1.算法总体思想
将一个难以直接求解问题分解成足够小的子问题,直到很容易求出其解为止。
2.递归函数的两个要素:
边界条件
递归函数
3.典型问题
兔子繁殖
斐波那契数列
Ackerman函数(双递归函数)
4.当算法复杂度很高时(如:阶乘),计算机运行能力对运行时间的提高效果越来越不明显。
所以 提高算法的效率显得很重要
5.递归算法的优缺点分析:
(可解决斐波那契数列进行分析)
优:结构清晰,归纳法可证明其正确性
缺:运行效率低,耗费时间,占用存储空间
解决办法:用递推实现递归
6.分治法步骤:
分解
递归求解
合并(不一定需要,如二分搜索)
7.分治法计算效率分析
主方法
8.大整数乘法
思路:将大整数分段,通过替换减少乘法的次数来提高算法的效率。
9.Strassen矩阵乘法
思路:将大矩阵分解成分块矩阵,通过替换减少矩阵乘法的运算次数来提高算法的效率。
10.棋盘覆盖
思路:将2k × 2k棋盘分解成4个2k-1 × 2k-1棋盘,用一个L型骨牌覆盖住无特殊方格的三块,递归分割就可以
11.合并排序
思路:将队列分割成相等的两段,分别排序,然后合并。(递归分割直到只剩下一个)
改进:直接两两排序,然后合并
12.快速排序
思路:大的放一边,小的放一边
13.算法之间的比较
相关文章推荐
- 浅析时钟向量算法
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- Android数据加密之异或加密算法的实现方法
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法