admin 管理员组

文章数量: 1184232


2024年3月12日发(作者:textarea属性能输入多少字)

哈夫曼编码与解码的实现

(一) 哈夫曼树的设计思想

对于一组具有确定权值的叶子结点可以构造出多个具有不同带权路径长度的二叉树,其

中具有最小带权路径长度的二叉树称作哈夫曼树或者最优二叉树。

首先给定 n 个权值创造 n 个只含根结点的二叉树, 得到一个二叉树林; 再在这二叉树林

里面找根结点的权值最小和次小的两棵树作成新的二叉树,其中新的二叉树的根结点的权值

为摆布子根结点权值之和; 最后在二叉树林中把组合过的二叉树删除, 再重复第二步, 直到

最后就剩一颗二叉树的时候得到的这棵二叉树就是哈夫曼树。

(二)哈夫曼编码与解码的设计思想

在数据通讯中, 时常要将传送的文字转换为二进制字符 0 和 1 组成的二进制串, 称这个

过程为编码。 与子相对的是解码或者是译码, 就是用与编码相同的方式将二进制串转换称编

码 前的文字的过程称作解码。 在这里是通过哈夫曼树实现编码与解码的, 所以称作是哈夫

曼编 码与解码。

首先输入一个字符串, 还有相应的在哈夫曼树里的权值, 这样用哈夫曼树把字符串用二

进制串代替它, 这个过程要注意树和编码问题, 其中树的问题在上面已经解决, 主要看编码

的问题, 就是根据我们输入的字符串和权值建立相应的树模型, 这一步完成那编码就已经完

成为了, 最后打印就行了; 然后就是解码, 完成编码相应的解码就相对简单了,就是先找到

在 编码的时候建的那个模型树, 将编码中的二进制串再根据权值转换为相应的字符串, 这

样一 步步解码就行了。

以上就是通过用哈夫曼树进行哈夫曼编码与解码如何实现的主要设计思想。

- 1 -

哈夫曼编码与解码的实现

(一)哈夫曼树的流程图

开始

初始化哈夫曼链表

二叉树林

找最小和次小

的二叉树

组合成新的二叉树

删除用过的二叉树

是不是最后

一 个二叉

结束

图 1

哈夫曼树的流程图

(二)编码与解码的流程图

开始

开始

输入字符串

找到树的根结点

输入二进制串

判断权值

扫描

建立路径

根据树的路径

有最小和次小

打印对应字符

循环建立二叉树

根据树对路径分

继续扫描

左 0右 1

是否结束

写出对应结点的编

输出字符串

结束

结束

图 2

编码与解码的流程图

图片说明: (左边)编码流程图, (右边)解码流程图。

- 2 -


本文标签: 解码 二叉树 编码 权值 结点