哈夫曼压缩项目总结
最近一个月都在搞哈夫曼压缩。现在来总结一下哈夫曼压缩
在写代码之前,你要清楚的知道哈夫曼压缩是要分很多步的,为了你能在写代码时能很好地知道接下来要做什么,现在这一步是为了什么,所以最好提前将哈夫曼压缩的步骤罗列清楚。
哈夫曼压缩的基本思路:
1.统计文件中字节出现的频率
2.把频率当做权值构建哈夫曼树
这一步又可以分为:①构建优先队列
②将频率存入优先队列
③根据优先队列创建哈夫曼树
3.根据哈夫曼树得到每个叶子节点的哈夫曼编码,并得到一个哈夫曼编码的数组
------------------------------------以上准备好了就可以压缩了--------------------------------------------------
4.写入头文件信息,包括源文件中每个字节所对应的哈夫曼编码长度,哈夫曼编码表
5.写入源文件信息,将源文件中的字节按照哈弗曼编码将其写入压缩文件
以上是压缩的步骤,(代码部分就不多说了,直接附件上传了。)提前写好这个,在写压缩部分的时候依次的进行就好了。
(在这里想插一句,我觉得这个地方的步骤有点跟java面向对象的思想相斥,在压缩的时候,虽然也有创建对象,调用方法的地方,但是以上的这些步骤好像是在用面向过程的思想对压缩来进行拆解。在龙哥讲步骤的时候我就觉得有点愕然,在想,多久没有听到这个词了。而且当我习惯于用面向对象的思想来考虑问题的时候,出现了过程的东西,会有些错乱。这可能是我这次哈夫曼压缩写了一个月的时间还是雨里雾里的一个原因吧。)
在压缩中,会涉及到一些字节,bite,byte,之间的一些转换,还有二进制和十进制的转换。这些都是在写程序中需要注意的细节。
解压是压缩的逆过程,根据上面的步骤逆过来就行了。
如果你想让自己的压缩软件让大家都用的了,可以做个界面出来,我简单的添加了一个监听器类,做了个界面。
做完这些,我就做了很多测试,测试不同大小的文件,看看压缩的效率如何,结果发现,做了这么久的哈夫曼压缩,在压缩稍微大点的,几百MB的,效率很慢。效率问题,是需要解决。不过后来看了一些资料和其他人的看法,感觉哈夫曼压缩在原理上还是有一些缺陷的。如果在压缩一个重复的东西比较多的文件时,效率就很低。
哈夫曼压缩比前几个做的相比,稍微抽象了一些。涉及了很多运算和各种类型之间的转换,以前做画图板,连连看之类的,至少会有个形象的东西反映出来,抽象的结果导致我很多天都特迷茫,但是又不知道从哪里下手,有种有力使不出的感觉。经验之谈就说这么多了。哈夫曼压缩磕磕绊绊也算是弄出来了,希望后面的学习能够脚踏实地,慢工出细活~
相关推荐
VS2010编写的哈夫曼压缩工具,带图形界面,学习数据结构及算法的同学不要错过哦。
利用哈夫曼算法实现压缩解压缩,Linux c
哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩...
摘 要:哈夫曼编码是一种数据编码方式,以哈夫曼树——即最优二叉树,用带权路径长度最小的二叉树,对数据进行重编码,经常应 用于数据压缩。在计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称“熵编码法...
用树结构构造出哈弗曼树,然后再求出哈弗曼编码,实现求解的过程
vc++哈夫曼压缩算法 vc++哈夫曼压缩算法
哈夫曼算法实现图片的压缩,图片有前后对比。
C语言实现的huffman压缩解压缩算法
通过自定义算法创建哈夫曼树和编码,对文件进行二进制操作实现压缩和解压。
哈夫曼压缩与解压缩程序(JAVA)
每次选出权值最小且没有双亲的两个节点建立新的哈弗曼树。 无栈非递归遍历Huffman树,求Huffman编码。...要注意的是当文件较小时,不宜使用哈夫曼来进行压缩,此时文件头占比过大,会使压缩结果很差。
哈夫曼压缩和解压和解压,数据结构课程设计,c++源码。
哈夫曼实现文件的压缩与解压缩,代码关键部分有注释。
实验目的:理解哈弗曼信源编码算法,并能应用于文件压缩中。 实验内容:写出程序,利用哈弗曼编码实现对文件的压缩,并能解压文件。 实验步骤: 1、压缩 (1) 统计原始文件中各字节出现的概率(次数); (2) 采用...
利用哈夫曼算法进行文件的压缩和解压缩。 利用命令行对指定的文件进行压缩和解压缩。 能对一般的文本文件有较好的压缩能力,对其它格式文件可以进行压缩但不一定能有压缩效果。对于用此程序压缩的文件可以用此程序...
哈夫曼压缩与解压算法(可以直接运行),压缩成二进制文件,而且生成了txt文件可以查看哈夫曼编码。C++代码
利用哈夫曼编码对数据进行无损压缩,实现Huffman压缩的编码器和译码器。 1.首先读入待压缩源文件。 2.然后建立并分析字母表,对每种字符的出现频度进行统计,以频度作为建立Huffman树的权值。 3. 频度表建好后,就...
这里采用哈夫曼编码方式来对每个字符重新编码,因为哈夫曼树具有最小带权路径长度的性质,能够生成用于压缩的二进制前缀码。程序使用的 “静态统计模型”,也就是说在编码前统计要编码的信息中所有字符的出现频率,...
压缩解压缩 源码 VC MFC实现 可供学习研究