算法 *-* 贪心算法Greedy
贪心 vs 动态规划
联系
- 都是一种推导算法
- 都是分解成子问题来求解,都需要具有最优子结构
区别
如果把所有的子问题看成一棵树的话:
- 贪心:贪心从根出发,每次向下寻找(原文:遍历)最优子树即可。通常这个“最优”都是基于当前情况下显而易见的“最优”,仅需看本节点的情况,不需要知道该节点的所有子树情况,于是构不成一颗完成的树。贪心得到的并不一定是最优解,贪心只能得到一个比较好的解。
- 动态规划:动态规划是自底向上,从叶子向根,构造子问题的解。对每一个子树的根,都要求出其下面每一个叶子的值,并且最终选择其中的最优值作为自身的值,得到答案。最后得到一棵完整的树。动态规划本质是穷举法,可以保证结果是最佳的,复杂度高。
重要例子
如果现在要找开 15元钱,有11元的,5元的和1元的,则:
- 根据动态规划法的解题思想,得到最优解为3张5元面额的, 总共3张
- 根据贪心算法的解题思想,得到的近似最优解为1张11元面额的(先从最优的情况,最能达到目的的选择做起),加上4张1元面额的,总共5张
我们发现,贪心得到的并不是最优解,只是一个比较好的解,但贪心算法是最容易想到的,也是最符合人性的思路。
因此,大部分国家的货币设计,会让“贪心算法”的解就是最优解。
什么时候用贪心,而不是动态规划?
用贪心的情况:
(从根出发,每次向下)每一步都做出一个局部最优的选择,最终的结果就是全局最优
注意哦,这是一种特殊性质,其实只有一小部分问题拥有这个性质。比如你面前放着 100 张人民币,你只能拿十张,怎么才能拿最多的面额?显然每次选择剩下钞票中面值最大的一张,最后你的选择一定是最优的。
参考文章
https://blog.csdn.net/ppppublic/article/details/61629248
https://www.cnblogs.com/Joezzz/p/9716193.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?