`
ronaldoLY
  • 浏览: 42126 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

哈夫曼压缩——ronaldoLY

 
阅读更多

                                                       哈夫曼压缩项目总结

    最近一个月都在搞哈夫曼压缩。现在来总结一下哈夫曼压缩

     在写代码之前,你要清楚的知道哈夫曼压缩是要分很多步的,为了你能在写代码时能很好地知道接下来要做什么,现在这一步是为了什么,所以最好提前将哈夫曼压缩的步骤罗列清楚。

 

      哈夫曼压缩的基本思路:

1.统计文件中字节出现的频率

 

2.把频率当做权值构建哈夫曼树

这一步又可以分为:①构建优先队列

                           ②将频率存入优先队列

                           ③根据优先队列创建哈夫曼树

3.根据哈夫曼树得到每个叶子节点的哈夫曼编码,并得到一个哈夫曼编码的数组

 

------------------------------------以上准备好了就可以压缩了--------------------------------------------------

4.写入头文件信息,包括源文件中每个字节所对应的哈夫曼编码长度,哈夫曼编码表

5.写入源文件信息,将源文件中的字节按照哈弗曼编码将其写入压缩文件

 

 

 

 

 

以上是压缩的步骤,(代码部分就不多说了,直接附件上传了。)提前写好这个,在写压缩部分的时候依次的进行就好了。

(在这里想插一句,我觉得这个地方的步骤有点跟java面向对象的思想相斥,在压缩的时候,虽然也有创建对象,调用方法的地方,但是以上的这些步骤好像是在用面向过程的思想对压缩来进行拆解。在龙哥讲步骤的时候我就觉得有点愕然,在想,多久没有听到这个词了。而且当我习惯于用面向对象的思想来考虑问题的时候,出现了过程的东西,会有些错乱。这可能是我这次哈夫曼压缩写了一个月的时间还是雨里雾里的一个原因吧。)

 

      在压缩中,会涉及到一些字节,bite,byte,之间的一些转换,还有二进制和十进制的转换。这些都是在写程序中需要注意的细节。

      解压是压缩的逆过程,根据上面的步骤逆过来就行了。

      如果你想让自己的压缩软件让大家都用的了,可以做个界面出来,我简单的添加了一个监听器类,做了个界面。

      做完这些,我就做了很多测试,测试不同大小的文件,看看压缩的效率如何,结果发现,做了这么久的哈夫曼压缩,在压缩稍微大点的,几百MB的,效率很慢。效率问题,是需要解决。不过后来看了一些资料和其他人的看法,感觉哈夫曼压缩在原理上还是有一些缺陷的。如果在压缩一个重复的东西比较多的文件时,效率就很低。

      哈夫曼压缩比前几个做的相比,稍微抽象了一些。涉及了很多运算和各种类型之间的转换,以前做画图板,连连看之类的,至少会有个形象的东西反映出来,抽象的结果导致我很多天都特迷茫,但是又不知道从哪里下手,有种有力使不出的感觉。经验之谈就说这么多了。哈夫曼压缩磕磕绊绊也算是弄出来了,希望后面的学习能够脚踏实地,慢工出细活~

 

 

 

 


 

 

 

 

 

 

 

  • 大小: 37.1 KB
0
2
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics