哈夫曼编码实验报告
①问题描述:给定n个字符的权值数组w,根据哈夫曼编码与译码规则,实现一个哈夫曼编/译码系统(利用实验指导书上的27个字符的数据进行实验)。
②利用顺序表存储Huffman树,编码结果的存储方式采用书上的结构。
③Huffman树的构造约定如下:
根的权值较小的子树作为左子树,当权值相等时,则先生成的子树是左子树;
按照结点的生成次序选择权值较小的两棵子树构造Huffman树;从叶子结点到根结点逆向求出每个字符的Huffman编码,不采用递归方法;
从根结点开始实现译码,要求被译码的字符数大于20个字符。
④采用文件方式存储n个权值和待翻译的二进制代码,其余数据均不采用文件存储。
序号字符权值双亲结点左孩子右孩子
1 □186 0 0 0
2 A 64 0 0 0
3 B 13 0 0 0
4 C 22 0 0 0
5 D 32 0 0 0
6 E 103 0 0 0
7 F 21 0 0 0
8 G 15 0 0 0
9 H 47 0 0 0
10 I 57 0 0 0
11 J 1 0 0 0
12 K 5 0 0 0
13 L 32 0 0 0
14 M 20 0 0 0
15 N 57 0 0 0
16 O 63 0 0 0
17 P 15 0 0 0
18 Q 1 0 0 0
19 R 48 0 0 0
20 S 51 0 0 0
21 T 80 0 0 0
22 U 23 0 0 0
23 V 8 0 0 0
24 W 18 0 0 0
25 X 1 0 0 0
26 Y 16 0 0 0
27 Z 1 0 0 0
实验过程与结果
完整代码:(实验环境codeblock)
关闭程序,重新开始,此时选择读取文件方式构建哈夫曼树,文件hafuman.txt中存储着各叶子节点权值,对应字符和待编译的二进制编码,读取文件截图如下,其他操作6.7.8及结果同上。