五分钟了解一下什么是「贪心算法」算法必看系列二十一

丰富的线上&线下活动,深入探索云世界

做任务,得社区积分和周边

最真实的开发者用云体验

让每位学生受益于普惠算力

让创作激发创新

资深技术专家手把手带教

遇见技术追梦人

技术交流,直击现场

海量开发者使用工具、手册,免费下载

极速、全面、稳定、安全的开源镜像

开发手册、白皮书、案例集等实战精华

为开发者定制的Chrome浏览器插件

1概念

贪心的意思在于在作出选择时,每次都要选择对自身最为有利的结果,保证自身利益的最大化。贪心算法就是利用这种贪心思想而得出一种算法。

贪心算法作为五大算法之一,在数据结构中的应用十分广泛。例如:在求最小生成树的Prim算法中,挑选的顶点是候选边中权值最小的边的一个端点。在Kruskal算法中,每次选取权值最小的边加入集合。在构造霍夫曼树的过程中也是每次选择最小权值的节点构造二叉树。这种每次在执行子问题的求解时,总是选择当前最优的情形,恰好符合贪心的含义。

贪心算法可以简单描述为:大事化小,小事化了。对于一个较大的问题,通过找到与子问题的重叠,把复杂的问题划分为多个小问题。并且对于每个子问题的解进行选择,找出最优值,进行处理,再找出最优值,再处理。也就是说贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望得到结果是最好或最优的算法。

贪心算法在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。

2算法流程

(1)建立数学模型来描述问题。(2)把求解的问题分成若干个子问题。(3)对每一子问题求解,得到子问题的局部最优解。(4)把子问题的局部最优解合成原来问题的一个解。

3伪代码

从问题的某一初始解出发while(能朝给定总目标前进一步)do选择当前最优解作为可行解的一个解元素;由所有解元素组合成问题的一个可行解。4示例

题目描述

题目分析

(1)建立数学模型设小明每次选择纸币面额为Xi,需要的纸币张数为n张,剩余待支付金额为V,则有:X1+X2+…+Xn=456.(2)问题拆分为子问题小明选择纸币进行支付的过程,可以划分为n个子问题:即每个子问题对应为:在未超过456的前提下,在剩余的纸币中选择一张纸币。(3)制定贪心策略,求解子问题制定的贪心策略为:在允许的条件下选择面额最大的纸币。则整个求解过程如下:

(4)将所有解元素合并为原问题的解

小明需要支付的纸币张数为7张,其中面值100元的4张,50元1张,5元1张,1元1张。

THE END
1.循序渐进,搞懂什么是贪心算法循序渐进,搞懂什么是贪心算法 贪心算法简介 贪心算法(greedyalgorithm)又称贪婪算法,指在求解最优化问题时,每一步都选择在当前状态下最好或最优的策略,从而逐步推导出最优解的算法。 贪心算法不从整体最优上加以考虑,它所做出的选择只是局部最优选择。这种策略的显著特点是“目光短浅”,只看重眼前最好的选择,而不https://blog.csdn.net/weixin_43790276/article/details/139484330
2.贪心算法是什么?贪心算法如何解决问题?贪心算法是什么?贪心算法如何解决问题? 你可能不知道贪心算法,但你一定知道活在当下。如果你知道,那么恭喜你,你已经掌握贪心算法的核心本质了! 贪心算法的理念就是不问过去,不计将来,只考虑当下。捡了芝麻丢了西瓜?不存在的!当下有西瓜,绝不碰芝麻~ 贪心算法讲究的是每遇到一个子问题,都取当下情况的最优解,https://www.jingsailian.com/news/375195.html
3.什么是贪心算法?详述贪心算法的原理?用C语言实现贪心算法。内附一、什么是贪心算法? 贪心算法,又称贪婪算法,是一种常用的解决优化问题的思想。 该算法通过把原问题分解为多个子问题,然后在每个子问题中选择最优解,从而得到整体的最优解。 在每个子问题的求解过程中,贪心算法总是做出在当前看来最优的选择,而不考虑未来的后果。 https://cloud.tencent.com/developer/news/1087288
4.什么算法是基于贪心算法思想的方法贪心算法的特点是简单、高效、易于实现,因此适用于一些复杂问题的简单实现。同时,贪心算法常常需要具备某些特定的局限性,比如最优子结构性质,即问题的最优解可以由其子问题的最优解推导而来。 贪心算法在实际中的应用广泛,不光是前面提到的几个问题,还有很多其他的问题,比如最优装载问题、哈夫曼编码问题等等,在这里就http://kaoshi.educity.cn/rk/e6syqngmsg.html
5.贪心算法在解决问题时可能会遇到的困难是什么?贪心算法在解决问题时可能会遇到的困难主要包括以下几点: 局部最优解不一定导致全局最优解:贪心算法每一步都选择当前看起来最优的解决方案,但这并不意味着最终的解决方案就是全局最优的。有时候局部最优解会导致最终的解并不是最优的。 子问题之间的相互影响:有些问题的子问题之间是相互影响的,而贪心算法通常只https://www.mbalib.com/ask/question-ec8b9e6322174fd2cdc95e0c9fb7a26f.html
6.leetcode刷题之基础知识贪心算法贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优(即最有利)的选择,以期望通过局部最优选择来达到全局最优解的算法策略。贪心算法不像动态规划算法那样考虑整个问题的最优解,而是做出在当前看来最好的选择,也就是说,它不考虑较大范围的问题。 https://zhuanlan.zhihu.com/p/684018837
7.1.问题求解算法通过实例掌握动态规划的基本思想与算法设计方法●引导要点:以空间换时间的关键是存储效率; 动态规划与指数时间的有效降低 论题2-13:贪心算法 ●学习目的: 掌握利用贪心策略设计算法的思路与方法; 掌握用分摊进行算法分析的思想与方法●引导要点:贪心算法的正确性证明 论题2-14:用于动态等价关系的数据结构 ●学习目的:https://cs.nju.edu.cn/jxcgj/kctxsf.html
8.什么是贪心算法旷野之息什么是贪心算法 参考:关于贪心算法,你该了解这些! 侵删 笔记: 什么是贪心?贪心的本质是选择每一阶段的局部最优,从而达到全局最优。这么说有点抽象,来举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最https://www.cnblogs.com/sedkyzx/p/15389723.html
9.算法python贪心算法pythonflyingsmiling的技术博客一、什么是贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响https://blog.51cto.com/u_13424/6480474