当前位置: 代码迷 >> 综合 >> 哈夫曼树(Huffman)编码 压缩数据编程
  详细解决方案

哈夫曼树(Huffman)编码 压缩数据编程

热度:16   发布时间:2024-02-28 18:13:51.0

网上有不少人介绍哈夫曼树的生成方法,但是对于实现方式却都只字不提,只是放了代码,这里简单介绍一下一个我自己编写的哈夫曼树的实现方式。
如果你完全不知道哈夫曼树的生成方式,那么本篇文章并不适合你阅读,如果你已经了解哈夫曼树的构造方式,但是并不知道如何使用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比较。
解码等我我有空说,自己想想应该也能想出来了。