算法——贪心算法
来源:互联网 发布:91kge网络在线ktv 编辑:程序博客网 时间:2024/06/08 22:51
定义:
在每一步都做出当时看起来的最佳选择,也就是说,它总是做出局部最优选择,不从整体上考虑最优选择。
基本思想:
将问题的求解过程看作是一系列选择,每次选择一个输入,每次选择都是当前状态下的最好选择(局部最优解)。每作一次选择后,所求问题会简化为一个规模更小的子问题。从而通过每一步的最优解逐步达到整体的最优解。
适用问题:
贪心选择:整体的最优解可通过一系列局部最优解达到。每次的选择可以依赖以前作出的选择,但不能依赖于后面的选择。
最优化子结构:问题的整体最优解中包含着它的子问题的最优解。
活动选择问题:
设有n个活动的集合,其中每个活动都要求使用同一资源,如教室等,而在同一时间内只有一个活动能使用这一资源。每个活i都有一个要求使用该资源的起始时间和一个结束时间,且。如果选择了活动i,则它在半开时间区间内占用资源。若区间与区间不相交,则称活动i与活动j是相容的。也就是说,当或时,活动i与活动j相容。
由于输入的活动以其完成时间的非减序排列,所以迭代贪心算法GREEDY_ACTIVITY_SELECTOR每次总是选择具有最早完成时间的相容活动加入集合A中。直观上,按这种方法选择相容活动为未安排活动留下尽可能多的时间。也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。
算法GREEDY_ACTIVITY_SELECTOR的效率极高。当输入的活动已按结束时间的非减序排列,算法只需O(n)的时间安排n个活动,使最多的活动能相容地使用公共资源。如果所给出的活动未按非减序排列,可以用O(nlogn)的时间重排。
GREEDY_ACTIVITY_SELECTOR(s,f)1n = s.length2A = {a1}3k = 14for m=2 to n5if s[m]>=f[k]6A=A U {am}7k=m6return A
贪心算法的执行过程:
贪心选择:选择活动集合S中最早结束的活动,因为它剩下的资源可供它之后尽量多的活动使用。
- 算法——贪心算法
- 算法导论—贪心算法
- 算法系列—贪心算法
- 算法——贪心
- 贪心算法—导弹
- 总结—贪心算法
- 【算法】计算机算法—分治算法--贪心算法
- 算法第五周——贪心算法
- 贪心算法(五)——迪杰斯特拉算法
- 算法学习——贪心算法实践
- 五大算法思想—贪心算法
- acm——贪心算法
- 算法——贪心策略
- 贪心算法——01
- 算法——贪心法
- 贪心算法—Problem A
- 贪心算法—Problem E
- 贪心算法—Problem C
- Git-工作区和暂存区
- 企业会计准则(具体准则)第2号——长期股权投资
- nor flash启动与nand flash启动的区别
- Unix: 第15章 重定向和管道
- NOIP2014模拟8.15
- 算法——贪心算法
- 配置文件的读与写 (三 )
- hello MemSQL 入门安装示例
- android sdk---spinner添加删除实例
- 嵌入式高效编程(二)——清晰
- c语言在有序数组中插入一个数,使之依然有序
- android图片异步加载
- 开发感悟
- nyist oj 289 苹果 (动态规划——背包问题)