Huffman编码程序分析

程序的流程:读取输入文件——>统计0-255出现的个数,计算概率——>排序,进行huffman编码——>输出编码后的文件。

输入文件的形式:


若命令参数为空,程序会自动创建一个临时文件。


调用value函数统计文件中256个样值(0-255)的出现次数,将数据存储在values数组,再计算概率,将数据存储在prob数组。

调用sort函数,按照概率大小对样值进行排序后调用huff函数完成huffman编码。

huff函数中会调用create_code函数,create_code函数会判断当前节点是否为树叶节点,若不是则写入下一个节点,左0右1进行赋值。当左右节点都不存在即为树叶节点时,记录码字和长度。

huff函数还需要调用create_list函数。create_list函数先按概率从大到小排出概率链,tail和tail->back(概率最小的两个节点)作为初始节点,将两者概率相加,生成新的父节点,父节点进入概率链重新开始排序。重复以上工作,直到最终的父节点,该点的码字为0.

完成huffman编码后将256个样值的码字和长度写入输出文件。

测试图像:


640*480,YUV420P,大小为450KB。

huffman编码后的输出文件(部分):


输出文件大小为386KB。

可以看出,huffman编码对文件有一定的压缩效果,但是压缩比不高,有些情况甚至比编码前的文件更大。所以只靠huffman编码来提高压缩率是不可行的,需要结合其它编码方式使用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值