下面的文字来源于维基百科

贪心算法(英语:greedy algorithm)

又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。比如在旅行推销员问题中,如果旅行员每次都选择最近的城市,那这就是一种贪心算法。

贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解。

贪心算法与动态规划的不同在于它对每个子问题的解决方案都做出选择,不能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能。

贪心法可以解决一些最优化问题,如:求图中的最小生成树、求哈夫曼编码……对于其他问题,贪心法一般不能得到我们所要求的答案。一旦一个问题可以通过贪心法来解决,那么贪心法一般是解决这个问题的最好办法。由于贪心法的高效性以及其所求得的答案比较接近最优结果,贪心法也可以用作辅助算法或者直接解决一些要求结果不特别精确的问题。

用代码去实现算法

维基百科上有一个例题,黄哥按照贪心算法的思路转换成Python 代码。

例题:一般人换零钱的時候也會應用到貪心算法。把$36換散︰$20 > $10 > $5 > $1

如何将算法用代码去实现是一个基本功夫。换36元换零钱,用最少硬币的换算方法,按照贪心算法,那么先从面值大的换起。

先将面值list,从大到小排序,

coins_list = [20, 5, 10, 1]

coins_list.sort(reverse=True)

用一个for 循环去遍历list中的零钱,36元除以最大面值后的商,是第一大面值可以换的数量。将余数重新除第二大面值,得第二大面值的可兑换数,依次下去,可以得到最少用的硬币数量。

贪心算法不是解决这个问题的最好的方法,最好的方法是动态规划算法。

请看代码

测试代码

黄哥:黄哥Python:提醒要转行当程序员的朋友,学习要分先后主次​zhuanlan.zhihu.com

python换零钱_黄哥Python, 贪心算法解决换零钱问题相关推荐

  1. 贪心算法解决找零钱问题

    4.1 找零问题 问题描述: 设有50.20.10.5.1.0.5.0.1等面额的零钱,顾 客购物花了n元,在支付(n / 100 + 1) * 100元后,收银员应如何找 零,才能使找回的钱数最少. ...

  2. python新书 代码_黄哥Python,2018年Python新书推荐

    1.对待学习Python的态度问题. 如果你想在大城市(一线城市就业),通过学习python 学会编程,是比较好的选择之一.当然可以选择Java.PHP等编程语言.如果在三线,四线城市等城市工作,建议 ...

  3. visual studio code Python终端运行_黄哥Python:VS Code 10个Python 插件

    转载自 https://medium.com/issuehunt/10-visual-studio-code-extensions-for-python-development-de0be51bbee ...

  4. python解题思路_黄哥Python: 一道水题“最大唯一数” 解题思路

    有人在**论坛上提问,求解一个数组中最大唯一数. 1.读题,数组中全部是整数,有的数字有重复的,求出不重复的最大整数. 2.解题思路,利用Python 字典去统计每一个整数出现的次数,整数为key,出 ...

  5. Python项目:The Ship Rendezvous Problem,利用贪心算法解决船舶交会问题

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Python利用贪心算法解决船舶交会问题 1 Introduction 2 Python Task Greedy Heuristic ...

  6. 贪心算法解决活动安排-Python实现(排序+贪心选择)

    贪心算法解决活动安排 问题 问题概述 分析问题 解决问题 编程 编程流程以及数据类型选择 发现问题以及解决 最终实现 总结 程序缺陷以及完善 解题心路历程 问题 问题概述 设有n个活动的集合E={1, ...

  7. Python贪心算法解决收银员找零问题

    场景描述 在超市结账时,假设只有1分.5分.1角.3角.5角.1元的硬币,如果需要找零钱,给定需要找的零钱数目,使收银员找给顾客的硬币数量最少,运行程序如图: 知识补充  贪心算法是指在当前问题求解中 ...

  8. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  9. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

最新文章

  1. ConcurrentHashMap 的实现原理
  2. 13新功能_新功能简介|MySQL8.0数据查询脱敏
  3. 最近点对模板__hdu1007
  4. 《构建之法》第8,9,10章
  5. 波特率、信息传输速率与带宽的关系
  6. 笔记︱金融风险之欺诈分类以及银行防控体系简述
  7. Pycharm主题,彩虹猫进度条,翻译插件
  8. 整理任正非思想:要树立服务意识、品牌意识、群体意识-1996
  9. 并发类编程—CountDownLatch(同步器)
  10. webrtc音频处理源码概述
  11. 北京交通大学计算机学院复试名单,北京交通大学计算机与信息技术学院考研复试分数线复试通知复试名单...
  12. WAMP/WNMP单独安装
  13. python石头剪刀布游戏代码输入格式随机数种子设置为0_Python模拟石头剪刀
  14. 使用ps制作端午海报
  15. 【CV】CVPR2021高光谱图像重建论文笔记
  16. linux常用命令-查询手册
  17. 2020-2-24-数据库的基本使用-1
  18. 九月最热门的25个开源项目
  19. 每天巧得支付宝大额红包,以后再也不用天天“褥羊毛”了,可以天天“吃羊肉”了哦!
  20. python应用体系_python

热门文章

  1. 最优化方法及其matlab程序设计马昌凤,《马昌凤-最优化方法及其Matlab程序设计》.pdf...
  2. 鸿蒙之始什么意思,《战佛》快速升级小意思
  3. 2022年福田英才荟海归创业港补贴申请指南
  4. Windows看门狗(watchdog)软件AlwaysUp使用与下载
  5. 部署k3s高可用集群(实验性)
  6. Java面试之JUC部分
  7. 剖析Hibernate主键生成几种常用方式
  8. 各大电视品牌系统设置竞品分析
  9. 2021年电工(高级)考试题及电工(高级)考试报名
  10. 万台服务器一人挑的五大挑战