贪心算法
\quad \quad 贪心算法(greedy algorithm),又称贪婪算法,在每一步都做出当时看起来最好的选择,就是不断贪心的选取当前最优策略的计算方法。
目的: 贪心算法是求解最优化问题
适用条件/前提:
- 贪心选择性质:
可以通过做出局部最优(贪心)选择来构造全局最优解。换句话说,当进行选择时,我们直接做出在当前问题中看来最优的选择,而不是考虑子问题的解 - 最优子结构:
如果一个问题的最优解包含其子问题的最优解,则称此问题具有最优子结构性质。
解题步骤设计思路:
- 1、将最优化问题转化为这样的形式:对其做出一个选择后,只剩下一个子问题需要求解。
- 2、证明做出贪心选择后,原问题总是存在最优解,即贪心选择是安全的。
- 3、证明做出贪心选择后,剩余的子问题满足性质:其最优解与贪心选择组合即可得到原问题的最优解,这样就得到了最优子结构。
对比动态规划:
\quad \quad 动态规划与贪心算法都是解决最优问题的,但是也有以下几点区别:
-
贪心算法并不保证得到最优解,但对很多问题确实可以求的最优解。
-
动态规划算法是自底向上计算的,而贪心算法通常是自顶向下的,进行一次又一次选择,将给定问题实例变小。
-
贪心算法和动态规划相比,它既不看前面(也就是说它不需要从前面的状态转移过来),也不看后面(无后效性,后面的选择不会对前面的选择有影响),因此贪心算法时间复杂度一般是线性的,空间复杂度是常数级别的。
参考资料:
算法导论