常用算法之贪心
来源:互联网 发布:shell 编程 书籍 编辑:程序博客网 时间:2024/05/17 23:34
一、背景
在软考的准备中,遇到了算法,听过来人收,算法研究好了就很简单,研究不好就觉得很难,于是想着对算法做个总结,因为算法不仅仅在大题中占有15分,而且在选择题中同样也会出现,尤其是考复杂度和各种算法的适用情况,
贪心(目光短浅):就像找男女朋友一样,不求最好,只求合适(可行解)
二、如何知道在某种情况下用贪心是合适的呢?
贪心策略适用的前提是:局部最优策略能导致产生全局最优解。
实际上,贪心算法适用的情况很少。一般,对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可做出判断。
三、贪心算法实现的基本步骤:
1、候选集合(C)
通过一个候选集合C作为问题的可能解。(最终解均取自于候选集合C)
例如,在找零钱问题中,各种面值的货币构成候选集合。
2、解集合(S)
每完成一次贪心选择,将一个解放入S,最终获得一个完整解S
3、解决函数(solution)
检查解集合S是否构成问题的完整解。
例如,在找零钱问题中,解决函数是已付出的货币金额恰好等于应付款。
4、选择函数(select)
即贪心策略,这是贪心法的关键,选择出最有希望构成问题的解的对象。(这个选择函数通常和目标函数有关)
例如,在找零钱问题中,贪心策略就是在候选集合中选择面值最大的货币。
5、可行函数(feasible)
检查解集合中加入一个候选对象是否可行。(加入下一个对象后是不是满足约束条件)
例如,在找零钱问题中,可行函数是每一步选择的货币和已付出的货币相加不超过应付款。
四、贪心算法的实现框架
从问题的某一初始解出发;
while (能朝给定总目标前进一步)
{
利用可行的决策,求出可行解的一个解元素;
}
由所有解元素组合成问题的一个可行解;
用C解释如下:
<span style="font-size:14px;">Greedy(C) //C是问题的输入集合即候选集合 { S={ }; //初始解集合为空集 while (not solution(S)) //集合S没有构成问题的一个解 { x=select(C); //在候选集合C中做贪心选择 if feasible(S, x) //判断集合S中加入x后的解是否可行 S=S+{x}; C=C-{x}; } return S; } </span>
1 0
- 常用算法之贪心
- 常用算法之贪心算法
- 五大常用算法之贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- 五大常用算法之三:贪心算法
- iOS开发 - XCode Debugger中的Icon符号的意义
- hdu 4438 Hunters(数学期望)
- 课后作业
- R+树,多维动态对象的索引机制
- Servlet.service() for servlet jsp threw exception java.lang.NullPointerException
- 常用算法之贪心
- Java技术总结
- java中各种通讯的实例(socket、http等)
- 工作报告10/21
- cocos2dx 3.3 魂斗罗初步尝试 (目前)敌人和子弹(只做了一点点)
- 一些正则表达式
- Hack 6 为ViewGroup的子视图添加动画效果
- java Integer.valueOf()方法
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)