网上有不少人介绍哈夫曼树的生成方法,但是对于实现方式却都只字不提,只是放了代码,这里简单介绍一下一个我自己编写的哈夫曼树的实现方式。
如果你完全不知道哈夫曼树的生成方式,那么本篇文章并不适合你阅读,如果你已经了解哈夫曼树的构造方式,但是并不知道如何使用C/C++实现,那么请继续阅读。
哈夫曼树生成时,首先需要将2个weight最小的树叶组队,再新建一个parents给两个树叶,然后一直循环,直到构建完成。
那么,其实可以将结构体数组当成leaves和节点,构建树的实际操作就是构建每个数组元素的联系,如何将数组元素联系起来?
用结构体数组,每个数组元素都有lchild和rchild,以及一个sw,child就不说了,用来存与自己联系的两个数组元素下表,那么sw是用来干嘛的呢?
用来“删除”该元素。因为在构建树的时候,已经拥有了parents的元素不再参与weight比较以及构建,而是他们的parents参与,所以需要有一个属性来将他们“关闭”
parents和leaves的类型相同,拥有的属性也相同,并且parents不能复用,每个参与构建树的parents并非真的被“删除”了而是被“关闭”了,这个概念很重要。
需要编码N个字符,需要的数组大小为2N-1个,但是最开始开启的数组元素只有N个,当parents元素找到自己的两个child之后才会开启,并参与下次的weight比较。
解码等我我有空说,自己想想应该也能想出来了。
详细解决方案
哈夫曼树(Huffman)编码 压缩数据编程
热度:16 发布时间:2024-02-28 18:13:51.0
相关解决方案
- [讨论]huffman 数据压缩编程
- deep compression:compressing deep neural networks with pruning,trained quantization and huffman codi
- 数据结构——哈夫曼(Huffman)树+哈夫曼编码
- bzoj4198 [Noi2015] [荷马史诗] Huffman 编码
- (c语言)Huffman Codes (30分)
- Huffman 编码与解码系统
- 哈夫曼(Huffman)树创建及其带权路径长度(WPL)、哈夫曼编码、哈夫曼解码
- POJ 3253 修理栅栏 - (贪心 Huffman)
- 05-树9 Huffman Codes(30 分)
- 7-9 Huffman Codes (30 分)
- JAVA学习—huffman—2021-06-17
- JAVA学习—Huffman 编码 (节点定义与文件读取)—2021-06-16
- poj 1784 Huffman's Greed 动态规划四边形加速求最优二叉搜索树
- Huffman Tree ——合并果实
- 霍夫曼(Huffman)编码学习总结
- *****Huffman Codes(※构造哈夫曼树,※构造前缀树)
- 哈夫曼树(Huffman)编码 压缩数据编程
- 数据结构--二叉树 BST AVL树 Huffman