贪心算法:如何用贪心算法实现huffman压缩编码?
贪心算法(greedy algorithm) 有很多经典应用,Huffman coding、Prim和Kruskal最小生成树算法还有Dijkstra单源最短路径算法,如何利用贪心算法来实现对数据压缩编码有效节省数据存储空间?
如何理解“贪心算法”?
假设我们有一个可以容纳100kg物品的背包,有以下5种豆子,每种豆子的总量和总价值不同,为了让背包中所装物品的总价值最大,如何选择又装多少呢?
物品 | 总量(kg) | 总价值(元) |
---|---|---|
黄豆 | 100 | 100 |
绿豆 | 30 | 90 |
红豆 | 60 | 120 |
黑豆 | 20 | 80 |
青豆 | 50 | 75 |
只有先算算每个物品的单价,按照单价从高到低排列依次来装即可,黑豆、绿豆、红豆、青豆、黄豆。所以是20kg黑豆,30kg绿豆、50kg红豆,这思路就是贪心算法
- 当看到这类问题时候联想到贪心算法:针对一组数据,定义了限制值和期望值,希望从中选出几个数据,在满足限制值的情况下,期望值最大。限制值就是重量不超过100kg,期望就是总价值最大
- 尝试是否可以用贪心算法解决:每次选择当前情况下,在对限制值同等贡献量的情况下&