贪心算法: 如何用贪心算法实现Huffman压缩编码

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------

今天来学习贪心算法(greedy algorithm)。贪心算法有很多经典的应用,比如霍夫曼编码(Huffman Coding)、Prim 和 Kruskal最小生成树算法、还有 Dijkstra 单源最短路径算法。最小生成树算法和最短路径算法我们后面会讲到。今天来看下,霍夫曼编码,它是如何利用贪心算法来实现对数据压缩编码,有效节省数据存储空间的

如何理解“贪心算法”

先看一个例子,假设我们有一个可以容纳100kg物品的背包,可以装各种物品。我们有以下5种豆子,相差总量和总价如下图。为了让背包中所装物品总价最大,我们如何选择在背包中装哪些豆子?每种豆子双该装多少?
在这里插入图片描述

这个很多简单,现实中你也会这么做,算出单价后,装单价最高的。也就是往背包里装20kg黑豆、30kg绿豆、50kg红豆。

这个总量的解决思路显而易见,它本质上借助贪心算法。结合这个例子,我总结一下贪心算法解决总量的步骤。

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

类比刚刚的例子,限制值就是重量不超过100kg,期望值就是物品的总价值。这级数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值