目录
1. 贪心算法
贪心算法是:经过每步得到的局部最优解,从而去得到全局最优解。
力扣官方解释:
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择,就能得到问题的答案。贪心算法需要充分挖掘题目中条件,没有固定的模式,解决有贪心算法需要一定的直觉和经验。
贪心算法不是对所有问题都能得到整体最优解。能使用贪心算法解决的问题具有「贪心选择性质」。「贪心选择性质」严格意义上需要数学证明。能使用贪心算法解决的问题必须具备「无后效性」,即某个状态以前的过程不会影响以后的状态,只与当前状态有关
1.1 例题
2.递归
递归就是 自己调用自己,枚举所有情况,然后从中选取最优解。递归本质就是 暴力解。
那么递归如何优化? 通过动态规划。
因为 动态规划 基本都可以由 递归式子转化而来。
递归 三部曲:
- 选择递归函数的参数 ---- 可以变化的量
- 终止条件 --- 递归结束的标志
- 递归方向 --- 自顶向下 / 自底向上
2.动态规划
动态规划是:将一个大规模的问题转化为小规模问题,接着利用缓存存储中间结果,最后得到最终结果。
动态规划难点:
1. 如何找到转化过程?即状态转移方程
2. 中间结果如何保存?
3. 小规模问题是什么样子的?
动态规划解题思路:
大规模 <------ 式子 -------> 小规模(得先知道)
- basecase(初始化)<----> 小规模问题(要知道)-----> 递归的结束条件
- 状态转移方程 <-----> 递归式子
- 缓存中间结果 ----> 一般利用一维数组
- 顺序问题 -----> 是从 0->n-1 还是 从 n-1 --> 0 ?