算法 *-* 贪心算法Greedy

回到顶部(go to top)

贪心 vs 动态规划

联系

  • 都是一种推导算法
  • 都是分解成子问题来求解,都需要具有最优子结构

区别

如果把所有的子问题看成一棵树的话:

  • 贪心:贪心从根出发,每次向下寻找(原文:遍历)最优子树即可。通常这个“最优”都是基于当前情况下显而易见的“最优”,仅需看本节点的情况,不需要知道该节点的所有子树情况,于是构不成一颗完成的树。贪心得到的并不一定是最优解,贪心只能得到一个比较好的解
  • 动态规划:动态规划是自底向上,从叶子向根,构造子问题的解。对每一个子树的根,都要求出其下面每一个叶子的值,并且最终选择其中的最优值作为自身的值,得到答案。最后得到一棵完整的树。动态规划本质是穷举法,可以保证结果是最佳的,复杂度高

重要例子

如果现在要找开 15元钱,有11元的,5元的和1元的,则:

  • 根据动态规划法的解题思想,得到最优解为3张5元面额的, 总共3张
  • 根据贪心算法的解题思想,得到的近似最优解为1张11元面额的(先从最优的情况,最能达到目的的选择做起),加上4张1元面额的,总共5张

我们发现,贪心得到的并不是最优解,只是一个比较好的解,但贪心算法是最容易想到的,也是最符合人性的思路。

因此,大部分国家的货币设计,会让“贪心算法”的解就是最优解。

 

回到顶部(go to top)

什么时候用贪心,而不是动态规划?

用贪心的情况:

(从根出发,每次向下)每一步都做出一个局部最优的选择,最终的结果就是全局最优

 

注意哦,这是一种特殊性质,其实只有一小部分问题拥有这个性质。比如你面前放着 100 张人民币,你只能拿十张,怎么才能拿最多的面额?显然每次选择剩下钞票中面值最大的一张,最后你的选择一定是最优的。

 

回到顶部(go to top)

参考文章

https://blog.csdn.net/ppppublic/article/details/61629248

https://www.cnblogs.com/Joezzz/p/9716193.html

 

posted on   frank_cui  阅读(111)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

levels of contents
点击右上角即可分享
微信分享提示