算法导论-贪心策略
来源:互联网 发布:c语言 ~ 编辑:程序博客网 时间:2024/05/23 05:07
贪心的基本步骤:
1)决定问题的最优子结构;
2)设计出一个递归解;
3)证明在递归的任一阶段,最优选择之一总是贪心选择。那么,做贪心选择总是安全的;
4)证明通过做贪心选择,只有一个子问题;
5)设计出一个实现贪心策略的递归算法;
6)将递归算法转换成迭代算法。
更一般的,可以用下面的方式来描述:
1)将优化问题转化成先做出选择,再解决剩下的一个子问题;
2)证明原问题总是有一个最优解是做贪心选择得到的,从而证明贪心选择是安全的;
3)在作出贪心选择之后,剩余的子问题具有这样的一个性质:如果将子问题的最优解和之前所做的贪心选择联合起来,可以得出原问题的一个最优解。
贪心选择性质:一个全局最优解可以通过局部最优(贪心)选择来达到。
在贪心算法中,所做的总是看似最佳的选择,然后再解决选择之后所出现的子问题。
最优子结构:对于一个问题来说,如果它的一个最优解包含了其子问题的最优解,则称该问题具有最优子结构。
贪心与动态规划的区别
动态规划和贪心算法都是一种递推算法 均用局部最优解来推导全局最优解 。
区别:
动态规划
全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有最优解。
条件:最优子结构;重叠子问题。
方法:自底向上构造子问题的解。
例子:子序列最大和问题,滑雪问题
贪心算法
条件:每一步的最优解一定依赖上一步的最优解。
方法:从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。
具体的可以参考0-1背包和部分背包问题。
参考:《算发导论》(第二版) 机械工业出版社
- 算法导论-贪心策略
- 【算法导论】分治策略
- 算法导论—贪心算法
- 《算法导论》笔记 第16章 16.2 贪心策略的基本内容
- 算法导论 ch16 贪心算法 霍夫曼编码
- 算法导论第十六章--贪心算法
- 【算法导论】贪心算法之背包问题
- 算法导论贪心算法-构造赫夫曼编码
- 贪心算法算法导论 找零问题
- 算法导论贪心算法之活动选择
- 【算法导论】贪心算法之赫夫曼编码
- 算法导论笔记:16贪心算法
- 算法导论 16章 贪心算法
- 算法导论16(贪心算法)
- 算法导论之贪心算法:哈夫曼编码
- 算法导论贪心算法活动选择
- 算法导论读书笔记(16)贪心算法
- 算法——贪心策略
- 如何判断设备电量
- 有序链表合并
- SQL Server 2005 彻底卸载、重装问题
- C# DriverControl
- 2012/12/3——2012/12/7周记
- 算法导论-贪心策略
- AS的UI组件架构设计
- 第12周项目3——四个数的最大公约数
- 龙门阵179期实录:技术专场之Android安全现状
- Linux: 定位Oops的具体代码行
- Servlet Filter与Spring interceptor的区别和应用Servlet Filter与Spring interceptor
- Android系统零碎知识整理
- 黑马程序员--C#数据库辅助类(简单版)
- Extjs的Requiers作用