本项目通过实现基于哈夫曼树的编码算法来进行高效的文件压缩和解压,并附有详细的源代码和实验分析报告。
综合实验:
1. 问题描述:利用哈夫曼编码进行通信可以显著提高信道的利用率、缩短信息传输时间并降低传输成本。这需要在发送端通过一个编码系统对即将传送的数据预先编码,在接收端将接收到的数据解码(复原)。对于双工信道,即支持双向数据传输的通道,每一边都需要完整的编/译码系统。试为这样的通信站点编写一套哈夫曼编码和解码程序。
2. 基本要求:一个完善的系统应包含以下功能:
- I: 初始化(Initialization)——从终端读取字符集大小n以及相应n个字符及其频度,建立并存储哈夫曼树至文件hfmTree中。
- E: 编码(Encoding)——利用已有的哈夫曼树对输入的文本进行编码,并将结果保存在CodeFile文件里。如果需要的话可以从hfmTree读取该树的信息。
- D: 解码(Decoding)——使用现有的哈夫曼树,解密存储于CodeFile中的代码并将其还原为原始信息,最后把译文存入Textfile中。
- P: 打印编码文件(Print Code File)——以紧凑格式展示CodeFile的内容在终端上,并且每行显示50个码。同时将此字符形式的编码保存进一个名为CodePrin的新文件里。
- T: 显示哈夫曼树(Tree Printing)——通过直观的方式如图形,把内存中的哈夫曼树呈现在终端屏幕上并将其以文本的形式存入文件TreePrint中。
3. 测试数据:使用以下字符及其出现频率的实际统计数据建立哈夫曼树,并实现对报文“THIS PROGRAME IS MY FAVORITE”的编码和解码:
- 字符 A B C D E F G H I J K L M
频度 186 64 13 22 32 103 21 15 47 57 1 5 32
- 字符 N O P Q R S T U V W X Y Z
频度: : : : : :
:63: :18:
:57:1: :
请根据以上描述完成实验。