`
天高云淡000
  • 浏览: 55100 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

哈夫曼压缩思路

 
阅读更多
作为一个不能称得上是菜鸟的菜鸟,最近刚刚学习了树以及哈夫曼树(最优二叉树)的知识。正准备利用哈夫曼原理做一个压缩软件。现在现将我的思路记录下来,大家如果有好的意见可以评论给我,大家一起学习!!!

首先先解释一下为什么可以用利用哈夫曼树做压缩软件。我们都知道哈夫曼树有一个特点:加全路径最小。。就是利用了这一点。

下面我们开始操作的步骤:
首先我们要造一颗哈树,目的是为了给文件的字节重新编码,我们可以把一个文件里的每个字节放在哈树的叶节点上,叶节点的权值代表该种字节的个数。那么,距离树根越近的字节的个数(权值)越大,距离树根越远的字节的个数(权值)越小。

其次我们要规定编码规则:
这里可以规定树枝向左为1,向右为0(当然也可以反过来)。这样每个字节就都有了一个编码(自己规定的编码),而源文件里各个字节的编码都是8位的,经过计算,重新编码后的字节总大小(文件总大小)必定小于原文件大小。

然后我们就要开始压缩了:
编码后,再把所有的字节写入一个新的文件就实现压缩了。。。。这里要注意压缩写入文件正文之前,我们先要写入文件的码表(利用哈树得到),不然如何解压呢?
在文件的写入中我们有时会遇到这么一个问题:这里我们以字节写入,当写到最后一个字节的时候发现最后的bit数不够组成一个字节。假设最后只剩2位。这里我们可以自己在后面补上6个0,当然6个1,0都可以不过自己要记住,否则在解压的时候会乱码的。。。。 

最后的步骤是解压缩:
解压缩和压缩是一个相逆的过程,压缩时一个写文件的过程,解压缩是一个读文件的过程。要注意的是以什么书序写入(压缩),就以什么顺序读,我们这里是按一个字节一个字节进行读写的因此也就不存在顺序的问题了。当读到最后一个字节后,我们注意把他还原成没有补0或1的情况。。。。


上述只是个人拙见,随着学习进度的增长,会继续补充。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics