一、什么是贪心算法

贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。(局部最优解,而不是整体最优解)

贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性(即某个状态以后的过程不会影响以前的状态,只与当前状态有关。)所以,对所采用的贪心策略一定要仔细分析其是否满足无后效性。

二、贪心算法基本思路

把求解的问题分成若干个子问题

对每个子问题求解,得到子问题的局部最优解(不能保证求得的最后解是最佳的)

把子问题的解局部最优解合成原来问题的一个解

可以看出贪心算法和动态规划非常相似,但是两者存在部分区别

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;}

贪心策略取得最优解的条件_什么是贪心算法?相关推荐

  1. 贪心策略--16经典问题总结!

    贪心算法 编号 题目 1货郎担 问题: 货郎担问题:假定有五个城市,已知费用矩阵如下,分别从五个城市出发,然后选取一条费用最小的线路,验证这种算法不能得到最优解. 贪心选择:每次选择之前没有走过的费用 ...

  2. 算法练习day13——190401(前缀树、贪心策略拼接字符串使字典序最小)

    1.前缀树(Trie Tree) 1.1 字符串生成前缀树的过程 字母是填在路上的,不是填在节点上的. 首先是一个空的头结点: 加入"abc"到这棵树中: 头结点有到a的路吗?没有 ...

  3. C语言:用贪心策略计算活动安排问题的最优解

    文章目录 前言 一.活动安排问题 二.解题思路 三.代码实现 总结 前言 关于这个活动安排问题的解题思路我第一遍是真的没看懂,所以我就直接看代码了,没想到啊,过一遍代码就直接理解了,真神奇!所以啊,如 ...

  4. 贪心算法适用条件_五大常用算法之三:贪心算法

    一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解. 贪心算法没有固定的算法框架,算法设计的关键 ...

  5. 贪心算法适用条件_【算法】贪心算法

    概念&&介绍 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解.所以说只有证明局部最优解在全局最优解 ...

  6. delphi if多个条件_屡试不爽!使用策略模式代替多个if条件语句

    使用策略模式代替多个if条件语句 一.背景: 1.1.多个if else语句,并且每个条件都有复杂的逻辑,代码变的异常臃肿. 1.2.维护成本很大,修改一个存在多年的类,要理清楚找到具体的if条件进行 ...

  7. 哈夫曼编码压缩率计算_程序员的算法课(8)-贪心算法:理解霍夫曼编码

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/ ...

  8. 算法提高:贪心策略的11个经典题目

    目录 字典序最小 零钱问题 股票问题(最多持有一支,可以买卖无限次) 小船过河 任务调度器 摆动序列 最小区间 跳跃游戏 II 分糖果 通配符匹配 拼接最大数 字典序最小 题目 给定一个由字符串组成的 ...

  9. java贪心算法_来谈谈贪心算法

    前言 之前讲了动态规划,在翻阅资料的时候看到了不少谈论贪心算法的,这两种算法也很有相似之处,正好最近又做到了有关贪心的题,所以今天写篇文章来谈一谈. 贪心算法(英语:greedy algorithm) ...

最新文章

  1. ROS 使用参数以及相应的 .launch 文件编写
  2. Navicat Premium 12连接Oracle时提示oracle library is not loaded的问题解决
  3. Android Studio 单刷《第一行代码》系列 02 —— 日志工具 LogCat
  4. 如何使用logminer查看日志内容
  5. Android UI 常用图标尺寸规范
  6. charles 安装 ssl_「从零开始Python爬虫」1.7.1 Charles的安装与配置
  7. 草稿-调试让本地的django项目上线到云服务器-不完整版
  8. html5超高分辨率,在这里,让你看懂超高分辨率FT-ICR MS
  9. win8:querySelector()方法
  10. VMware与宿主机同一网段
  11. 关于公司架构管控的思考
  12. 彩影ARP防火墙 v6.0.2(x64)的问题 错误代码1/0 解决方案
  13. CSDN日报20170602 ——《程序员、技术主管和架构师》
  14. 米家app扫描不到石头机器人_石头扫地机器人T7评测:能驾驭豪宅的高端旗舰?...
  15. u盘复制到计算机的文档打不开怎么办,U盘文件复制到别的电脑打不开怎么办
  16. 高级JAVA工程师的岗位职责,岗位要求
  17. raid5是计算机的什么知识,关于raid5的知识
  18. 计算机基础-数据存储
  19. 组态王与三菱PLC编程软件GXWorks2通过OPC数据库进行动态仿真
  20. Error: `fsevents` unavailable (this watcher can only be used on Darwin)

热门文章

  1. 产品认知:真正厉害的产品经理,都是“数据思维”的高手
  2. 苹果app商品定价_App Store 即将进行价格调整
  3. ie浏览器网页版进入_IE浏览器打开网页提示无法打开Internet站点的解决办法
  4. java自定义迭代器作用_Java实现的自定义迭代器功能示例
  5. 宝塔命令号操作全-最实用的莫过于修改密码啦
  6. React hook 中的数据获取
  7. jquery笔记一:下载安装、语法、选择器、遍历选择元素的方法、jQuery动画
  8. yii2增删改查及AR的理解
  9. Python 辨异 —— __init__ 与 __new__
  10. css3中的background