基于Huffman树的文件压缩原理及C语言实现(二)

本文详细介绍使用Huffman树进行文件压缩的过程,包括构建Huffman树、生成Huffman编码、文件压缩与解压的具体实现方法。

在上文基于Huffman树的文件压缩原理及C语言实现(一)中已经介绍并实现了如何建立Huffman树,得到Huffman编码,这篇我们将会接着说。如何通过Huffman树,实现文件压缩。

实现思路

  • 任何文件都可以看作是由字节组成的字节块,将字节看作基本编码单元,一个文件就可以看作是由字节组成的信息串。对文件中各字节的出现频率进行统计,并以出现频率作为每个字节块的权值,就可以用字节为叶结点构造哈夫曼树,进而构造出各字节的对应哈夫曼编码。

  • 对于源文件的字节编码是一种8位定长编码,而将各字节用哈夫曼编码进行重新编码,就有可能使得总的编码长度更短,这样将编码看做二进制位,每个8位作为一个字节写入压缩文件中,根据构建哈弗曼树的算法,在源文件中出现频率高的字符所对应的编码长度小,所以总的文件长度会小于原来的文件长度,从而达到文件压缩的效果。

    • 对于每一个字节,都是8位的,所以可以用ASCII码值对应每一个字符,也就是一个0~~255的数,可以创建一个256长度的数组,来记录每一个ASCII码值出现的频率。所以需要先将要压缩的文件遍历一遍,统计一下每一个字符出现的频率,然后调用求Huffman树的函数,建立一棵对应此文件字符出现的频率的Huffman树,并且求出对应每一个ASCII码的Huffamn编码。
    • 然后再遍历一遍,每次读出一个字节,根据其ASCII码值找出对应的Huffman编码;
    • 如果Huffman编码长度不足8位时,就再从文件中读出下一个字符,并且得到他的Huffman编码,与之前的没有写入文件的编码作为一个整体;
    • 如果此时的编码长度大于或等于8了,就将它对应的ASCII码值写入压缩文件中。
    • 就这样边读源文件,边进行翻译写入压缩文件,直到读完源文件,这样就完成了文件的压缩功能,
    • 由于还需要正确的解压文件,所以在进行压缩的时候还应该把Huf
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值