【问题描述】
编写一程序采用Huffman编码对一个正文文件进行压缩。具体压缩方法如下:
1. 对正文文件中字符(换行字符'\'除外,不统计)按出现次数(即频率)进行统计
2. 依据字符频率生成相应的Huffman树(未出现的字符不生成)
3. 依据Huffman树生成相应字符的Huffman编码
4. 依据字符Huffman编码压缩文件(即按照Huffman编码依次输出源文件字符)。
说明:
1. 只对文件中出现的字符生成Huffman,注意:一定不要处理\n,即不要为其生成Huffman码。
2. 采用ASCII码值为0的字符作为压缩文件的结束符(即可将其出现次数设为1来参与编码).
3. 在生成Huffman树时,初始在对字符频率权重进行(由小至大)排序时,频率相同的字符ASCII编码值小的在前;新生成的权重节点插入到有序权重序列中时,出现相同权重时,插入到其后(采用稳定排序)。
4. 遍历Huffman树生成字符Huffman码时,左边为0右边为1。
5. 源文件是文本文件,字符采用ASCII编码,每个字符点8位;而采用Huffman编码后,高频字符编码长度较短(小于8位),因此最后输出时需要使用C语言中的位运算将字符Huffman码依次输出到每个字节中。
【输入形式】
对当前目录下文件input.txt进行压缩。
【输出形式】
将压缩后结果输出到文件output.txt中,同时将压缩结果用十六进制形式(printf("%x",...))输出到屏幕上,以便检查和查看结果。
【样例输入1】
若当前目录下input.txt中内容如下:
aaabbc
【样例输出1】
15f0
同时程序将压缩结果输出到文件output.txt中。
【样例说明】
输入文件中字符的频率为:a为3,b为2,c为1,此外,\