【数据结构与算法】->算法->贪心算法

Ⅰ 前言

贪心算法(Greed Algorithm)的思想其实是生活中一个很常用的思想,贪心算法本身也有很多经典的应用,比如哈夫曼编码(Huffman Coding)、Prim 和 Kruskal 最小生成树算法、Dijkstra 单源最短路径算法。最小生成树和最短路径在我后面的文章中会介绍,哈夫曼编码在我之前的文章中也讲过了,今天我们再从贪心算法的角度来看看。

【数据结构与算法】->数据结构->哈夫曼树->哈夫曼编码&解码

Ⅱ 贪心算法的理解

关于贪心算法,我们先看一个例子。

假设我们有个可以容纳 100kg 物品的背包,可以装各种物品。我们有以下 5 种豆子,每种豆子的总量和总价值都各不相同,为了让背包中所装物品的价值最大,我们要如何选择在背包中装哪些豆子,每种豆子又该装多少呢?

在这里插入图片描述
实际上,这个问题不是很复杂,我们只要先计算一下每个物品的单价,按照单价由高到低来排序,然后就按这个顺序装就好了。单价从高到低排列为:黑豆、绿豆、红豆、青豆、黄豆。所以,我们可以往背包里装 20kg 黑豆,30kg 绿豆,50kg 红豆。

这个问题解决思路还是比较容易想到的,它本质借助的就是贪心算法。结合这个例子,我总结一下贪心算法解决问题的步骤。

第一步,当我们看到这类问题的时候,首先要联想到贪心算法:针对一组数据,我们定义了限制值和期望值,希望从中选出几个数据,在满足限制值的情况下,期望值最大。

对应到我们举的例子中,限制值就是重量不能超过 100kg,期望值就是物品的总价值。这组数据就是 5 种豆子,我们从中选出一部分

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值