Huffman编码文件压缩 - Huffman树的建立与编码

本文介绍了一种使用Huffman编码对文本文件进行压缩的方法,包括字符频率统计、Huffman树构建、字符编码生成和文件压缩。程序处理时忽略换行符,并以ASCII码值0的字符作为压缩结束符。通过位运算将字符编码输出到字节中,压缩后的结果以十六进制形式展示。
摘要由CSDN通过智能技术生成

【问题描述】

编写一程序采用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,此外,\

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值