分治法
分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同,然后将各子问题的解合并得到原问题的解
经典应用
- 1.二分搜索
- 2.大整数相乘
- 3.归并排序,快速排序
动态规划
基本思想是将待求解问题分解成若干子问题,先求解子问题,再结合这些子问题得到原问题的解。与分治法不同的是,子问题往往不是相互独立的,所以动态规划会记录所有已解决子问题的答案
基本要素:最优子结构+重叠子问题
经典应用
- 1.最长公共子序列
- 2.最大子序列和
- 3.01背包
- 4.最优二叉搜索树
贪心
贪心和动态规划都要求问题具有最优子结构性质
贪心总是做出在当前来看最好的选择,通过局部最优解实现总体最优解
基本要素:最优子结构+贪心选择性质
经典应用
- 1.单源最短路
- 2.最小生成树
- 3.哈夫曼编码
回溯
在问题的解空间树中,按照深度优先策略,从根节点开始搜索整个解空间
分支限界法
基本思想是,通常以广度优先的方式搜索问题的解空间树。每个活节点只有一次机会成为扩展节点
概率算法
蒙特卡罗
用蒙特卡罗算法求得一个问题的解,该解未必是正确的。求得正确解的概率依赖于算法所用的时间。所用的时间越多,正确解的概率就越高
拉斯维加斯
一旦用拉斯维加斯算法求解一个问题,不一定会得到解,但得到的解一定是正确解。得到正确界的概率随着计算耗时的增加而增高
舍伍德
总能求得一个解,且所求得的解总是正确的。舍伍德算法用于消除确定算法中求解问题的好坏实例之间在执行时间性能上的差异