贪心算法
来源:互联网 发布:js点击弹窗代码 编辑:程序博客网 时间:2024/06/14 11:26
贪心算法
格式说明:正体的字指教科书式的说法,斜体表示通俗理解
贪心算法是通过做一系列的选择来给出某一问题的最优解。把判断放在循环里,每一步都是(在剩下的里面)选最好的
设计算法步骤:
- 1、将优化问题转化成一个先做出选择,再解决剩下的问题。指定初始的一个值
- 2、证明原问题总有一个最优解是贪心选择得到的,证明算法是安全的。验证算法
- 3、将子问题的最优解和贪心选择联合起来,可以得到一个最优解。将结果翻译回情景
与动态规划的区别
在动态规划中,每一步都要做出选择,但是这些选择依赖于子问题的解。因此,解动态规划问题一般是从子问题至大问题。自底向上。
在贪心算法中,先做出看似最优的选择,然后再解决选择之后的问题。可以看成是从总体先做出最优的选择然后再进一步解决剩下的问题。自顶向下。
例子:
设有11个活动需要教室,每个活动都要独立进行,即同一时间内只能有一个活动使用教室,每个活动的开始时间为Si和结束时间Fi,即使用教室区间为(Si,Fi),现在要求分配活动占用时间表,保证该教室使用率最高!
程序:
#include <iostream>int s[11] ={1,3,0,5,3,5,6,8,8,2,12};int f[11] ={4,5,6,7,8,9,10,11,12,13,14};int HgreedyChoose(int len,int *s,int *f,bool *flag);int main(){ bool flag[11] = {0}; HgreedyChoose(11,s,f,flag); for(int i=0;i<11;i++) { if(flag[i]) { std::cout<<i<<" "; } } return 0;}int HgreedyChoose(int len,int *s,int *f,bool *flag){ flag[0] = true; int j = 0; for(int i=1;i<len;++i) { if(s[i] >= f[j]) { flag[i] = true; j = i; } } return 0;}
阅读全文
1 0
- 【贪心】贪心算法总结
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- Nodejs 学习(四)--参数的接收
- 【自考】C++程序设计(三)特殊函数和成员
- 三星S6的Wifi连接上了,却无法上网
- SQL Plus简单的操作
- NEUQ oj 1068 题解
- 贪心算法
- 洛谷10月月赛R1·浴谷八连测R1·提高组 SAC E#1 -T1 一道中档题 Factorial
- PHP运行模式
- C语言运算符简单总结
- EUC-CN是什么编码
- Spectral Clustering(谱聚类)
- 左移运算符 优先级很低
- DeviceIoControl获取文件LCN
- 三个强盗问题