贪心策略取得最优解的条件_什么是贪心算法?
一、什么是贪心算法
贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。(局部最优解,而不是整体最优解)
贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性(即某个状态以后的过程不会影响以前的状态,只与当前状态有关。)所以,对所采用的贪心策略一定要仔细分析其是否满足无后效性。
二、贪心算法基本思路
把求解的问题分成若干个子问题
对每个子问题求解,得到子问题的局部最优解(不能保证求得的最后解是最佳的)
把子问题的解局部最优解合成原来问题的一个解
可以看出贪心算法和动态规划非常相似,但是两者存在部分区别
1)贪心算法每一步的最优解一定包含上一步的最优解,上一步之前的最优解则不作保留。而动态规划全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有的局部最优解。
2)贪心算法只能求满足某些约束条件的可行解的范围。
3)贪心不能保证求得的最后解是最佳的,一般复杂度低。而动态规划本质是穷举法,可以保证结果是最佳的,复杂度高。
三、经典例题
1)指定币值和相应的数量,用最少的数量凑齐某金额
思路:优先选择面值大的钱币,以此类推,直到凑齐总金额
public int[] getCoinNum(int sum, int[] values, int[] counts) { int[] result = new int[values.length]; int add = 0; for (int i = values.length - 1; i >= 0; i--) { int num = (sum - add) / values[i]; if (num > counts[i]) { num = counts[i]; } add = add + num * values[i]; result[i] = num; } return result;}
2)部分背包问题,物品可以不完全放入包中,求价值最大的方案
思路:选择单位重量价值最高的物品,将尽可能多的该物品装入背包,直到背包装满为止。
public float getNum(float M, float[] w, float[] v) { float max = 0; float weight = 0; for (int i = 0; i < w.length; i++) { if (v[i] / w[i] > max) { max = v[i] / w[i]; weight = w[i]; } } float num = M / weight; return num;}
贪心策略取得最优解的条件_什么是贪心算法?相关推荐
- 贪心策略--16经典问题总结!
贪心算法 编号 题目 1货郎担 问题: 货郎担问题:假定有五个城市,已知费用矩阵如下,分别从五个城市出发,然后选取一条费用最小的线路,验证这种算法不能得到最优解. 贪心选择:每次选择之前没有走过的费用 ...
- 算法练习day13——190401(前缀树、贪心策略拼接字符串使字典序最小)
1.前缀树(Trie Tree) 1.1 字符串生成前缀树的过程 字母是填在路上的,不是填在节点上的. 首先是一个空的头结点: 加入"abc"到这棵树中: 头结点有到a的路吗?没有 ...
- C语言:用贪心策略计算活动安排问题的最优解
文章目录 前言 一.活动安排问题 二.解题思路 三.代码实现 总结 前言 关于这个活动安排问题的解题思路我第一遍是真的没看懂,所以我就直接看代码了,没想到啊,过一遍代码就直接理解了,真神奇!所以啊,如 ...
- 贪心算法适用条件_五大常用算法之三:贪心算法
一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解. 贪心算法没有固定的算法框架,算法设计的关键 ...
- 贪心算法适用条件_【算法】贪心算法
概念&&介绍 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解.所以说只有证明局部最优解在全局最优解 ...
- delphi if多个条件_屡试不爽!使用策略模式代替多个if条件语句
使用策略模式代替多个if条件语句 一.背景: 1.1.多个if else语句,并且每个条件都有复杂的逻辑,代码变的异常臃肿. 1.2.维护成本很大,修改一个存在多年的类,要理清楚找到具体的if条件进行 ...
- 哈夫曼编码压缩率计算_程序员的算法课(8)-贪心算法:理解霍夫曼编码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/ ...
- 算法提高:贪心策略的11个经典题目
目录 字典序最小 零钱问题 股票问题(最多持有一支,可以买卖无限次) 小船过河 任务调度器 摆动序列 最小区间 跳跃游戏 II 分糖果 通配符匹配 拼接最大数 字典序最小 题目 给定一个由字符串组成的 ...
- java贪心算法_来谈谈贪心算法
前言 之前讲了动态规划,在翻阅资料的时候看到了不少谈论贪心算法的,这两种算法也很有相似之处,正好最近又做到了有关贪心的题,所以今天写篇文章来谈一谈. 贪心算法(英语:greedy algorithm) ...
最新文章
- ROS 使用参数以及相应的 .launch 文件编写
- Navicat Premium 12连接Oracle时提示oracle library is not loaded的问题解决
- Android Studio 单刷《第一行代码》系列 02 —— 日志工具 LogCat
- 如何使用logminer查看日志内容
- Android UI 常用图标尺寸规范
- charles 安装 ssl_「从零开始Python爬虫」1.7.1 Charles的安装与配置
- 草稿-调试让本地的django项目上线到云服务器-不完整版
- html5超高分辨率,在这里,让你看懂超高分辨率FT-ICR MS
- win8:querySelector()方法
- VMware与宿主机同一网段
- 关于公司架构管控的思考
- 彩影ARP防火墙 v6.0.2(x64)的问题 错误代码1/0 解决方案
- CSDN日报20170602 ——《程序员、技术主管和架构师》
- 米家app扫描不到石头机器人_石头扫地机器人T7评测:能驾驭豪宅的高端旗舰?...
- u盘复制到计算机的文档打不开怎么办,U盘文件复制到别的电脑打不开怎么办
- 高级JAVA工程师的岗位职责,岗位要求
- raid5是计算机的什么知识,关于raid5的知识
- 计算机基础-数据存储
- 组态王与三菱PLC编程软件GXWorks2通过OPC数据库进行动态仿真
- Error: `fsevents` unavailable (this watcher can only be used on Darwin)
热门文章
- 产品认知:真正厉害的产品经理,都是“数据思维”的高手
- 苹果app商品定价_App Store 即将进行价格调整
- ie浏览器网页版进入_IE浏览器打开网页提示无法打开Internet站点的解决办法
- java自定义迭代器作用_Java实现的自定义迭代器功能示例
- 宝塔命令号操作全-最实用的莫过于修改密码啦
- React hook 中的数据获取
- jquery笔记一:下载安装、语法、选择器、遍历选择元素的方法、jQuery动画
- yii2增删改查及AR的理解
- Python 辨异 —— __init__ 与 __new__
- css3中的background