本资源提供了一个实用的哈夫曼编码与解码工具,用户可以利用该工具进行数据压缩和解压缩操作,有效减少文件大小并提高传输效率。
利用哈夫曼编码进行信息通讯可以大大提高信道利用率, 缩短信息传输时间,并降低传输成本。然而,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将接收到的数据进行译码(复原)。对于双工信道(即能够双向传输信息的信道),每端都需要完整的编/译码系统。试为此类通信站构建哈夫曼编码和解码系统。
基本要求如下:
1. 初始化(Initialization):从终端读入字符集大小n,以及n个字符及其对应的频度值,并建立哈夫曼树。将生成的哈夫曼树存储于文件hfmtree中。
2. 编码(Coding): 利用已构建好的哈夫曼树(若不在内存则需从文件hfmtree读取),对位于tobetrans中的文本进行编码,结果保存至codefile。
3. 译码(Decoding):利用已有的哈夫曼树将codefile内的代码解码为原始信息,并将其存储在textfile中。
4. 印代码(Print): 将文件codefile的内容以紧凑格式显示于终端上(每行50个编码),同时生成一个字符形式的编码文件写入到codeprint中。
5. 打印哈夫曼树(Tree print):将内存中的哈夫曼树以直观的方式展示在屏幕上,并将其转换为文本形式存放在treeprint。
测试数据:
1. 使用教科书6-2的数据调试程序;
2. 用以下字符集和频度的实际统计数据构建哈夫曼树并实现编码及解码:THIS PROGRAM IS MY FAVORITE。
字符: A B C D E F G H I J 频度:186 64 13 22 32 103 21 15 47 57
字符: K L M N O P Q R S T U 频度:5 32 20 57 63 15 1 48 51 80 23
字符: V W X Y Z 频度:8 18 1 16
实现提示:
- 文件codefile的基类型可以设定为子界型bit=0..1。
- 用户界面可采用菜单形式,显示上述功能符号(I、C、D、P和T),加上E表示结束运行,请用户选择所需的功能。每次执行完一个命令后重新展示此菜单直至用户输入E为止。
选作内容:
1. 上述codefile的基类型实际上占用了存放整数的空间,可以将其改为package=integer以压缩哈夫曼码至一个整型变量中。
2. 修改系统实现其源程序的编码和解码(尤其是行尾符处理)。
3. 实现各个转换操作时由用户指定相应的输入输出文件。