数据结构学习笔记:利用哈夫曼编码实现文件的压缩与解压

本文介绍了利用哈夫曼编码实现文件压缩与解压的方法。通过构建哈夫曼树,根据字符频率重新编码文件,使得高频字符编码变短,达到压缩效果。在解压过程中,根据哈夫曼编码进行译码,还原文件内容。然而,这种方法在处理字符分布均匀或非文本文件时,压缩效果可能不佳。
摘要由CSDN通过智能技术生成

原理:           

             利用哈夫曼树对文件中的字符进行重新编码,也就是根据文件中出现的所有字符的频率来创建哈夫曼树,然后生成哈夫曼编码来对文件中的所有字符进行重新编码,使文件中出现频率高的字符的编码变短,从而实现文件的压缩存储。相应的,解压过程也就是对文件按照哈夫曼编码的译码过程。

分析:

            无论是什么文件,它最终都是以二进制形式存储到硬盘中的。所以,我们在压缩文件时,可以将其按char 字符型来逐个读取,并记录该字符的出现频率,这样就可以根据字符及其频率表来创建哈夫曼树。

       压缩文件的一个难点在于,对字符重新编码后,新的字符编码必须以bit位的形式存入文件,但我们能操作的最小单位为1个字节,所以需要将新的编码用一个unsigned char 类型字符来间接储存。

例如,假设字符 'a' 的哈夫曼编码为 "01001",在存储时就可以 先声明一个 unsigned char 类型的数据 ch,并将其初始值设置为0 ,然后对 'a' 的编码进行遍历。

第一位编码为 '0' ,所以对 ch 左移一位:ch = ch << 1  ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值