哈夫曼压缩项目总结
最近一个月都在搞哈夫曼压缩。现在来总结一下哈夫曼压缩
在写代码之前,你要清楚的知道哈夫曼压缩是要分很多步的,为了你能在写代码时能很好地知道接下来要做什么,现在这一步是为了什么,所以最好提前将哈夫曼压缩的步骤罗列清楚。
哈夫曼压缩的基本思路:
1.统计文件中字节出现的频率
2.把频率当做权值构建哈夫曼树
这一步又可以分为:①构建优先队列
②将频率存入优先队列
③根据优先队列创建哈夫曼树
3.根据哈夫曼树得到每个叶子节点的哈夫曼编码,并得到一个哈夫曼编码的数组
------------------------------------以上准备好了就可以压缩了--------------------------------------------------
4.写入头文件信息,包括源文件中每个字节所对应的哈夫曼编码长度,哈夫曼编码表
5.写入源文件信息,将源文件中的字节按照哈弗曼编码将其写入压缩文件
以上是压缩的步骤,(代码部分就不多说了,直接附件上传了。)提前写好这个,在写压缩部分的时候依次的进行就好了。
(在这里想插一句,我觉得这个地方的步骤有点跟java面向对象的思想相斥,在压缩的时候,虽然也有创建对象,调用方法的地方,但是以上的这些步骤好像是在用面向过程的思想对压缩来进行拆解。在龙哥讲步骤的时候我就觉得有点愕然,在想,多久没有听到这个词了。而且当我习惯于用面向对象的思想来考虑问题的时候,出现了过程的东西,会有些错乱。这可能是我这次哈夫曼压缩写了一个月的时间还是雨里雾里的一个原因吧。)
在压缩中,会涉及到一些字节,bite,byte,之间的一些转换,还有二进制和十进制的转换。这些都是在写程序中需要注意的细节。
解压是压缩的逆过程,根据上面的步骤逆过来就行了。
如果你想让自己的压缩软件让大家都用的了,可以做个界面出来,我简单的添加了一个监听器类,做了个界面。
做完这些,我就做了很多测试,测试不同大小的文件,看看压缩的效率如何,结果发现,做了这么久的哈夫曼压缩,在压缩稍微大点的,几百MB的,效率很慢。效率问题,是需要解决。不过后来看了一些资料和其他人的看法,感觉哈夫曼压缩在原理上还是有一些缺陷的。如果在压缩一个重复的东西比较多的文件时,效率就很低。
哈夫曼压缩比前几个做的相比,稍微抽象了一些。涉及了很多运算和各种类型之间的转换,以前做画图板,连连看之类的,至少会有个形象的东西反映出来,抽象的结果导致我很多天都特迷茫,但是又不知道从哪里下手,有种有力使不出的感觉。经验之谈就说这么多了。哈夫曼压缩磕磕绊绊也算是弄出来了,希望后面的学习能够脚踏实地,慢工出细活~
相关推荐
这个项目“哈夫曼压缩——GUI”是基于Visual Studio 2010开发的一个图形化界面工具,对于学习数据结构和算法的学生来说,是一个很好的实践案例。 1. **哈夫曼编码**:哈夫曼编码是一种变长的前缀编码方式,通过构建...
在"哈夫曼实现压缩解压缩——源代码"中,我们可以期待看到一个用C语言在Linux环境下实现的哈夫曼编码和解码过程。 哈夫曼编码的过程主要包括以下步骤: 1. **构建哈夫曼树**:首先,统计所有字符的出现频率,创建...
### 哈夫曼编码——用树结构实现的 #### 概述 本文将详细介绍如何通过树结构构建哈夫曼树以及如何从该树中获取哈夫曼编码。哈夫曼编码是一种广泛应用于数据压缩领域的编码方法,尤其适用于无损压缩场景。其核心思想...
哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩...
哈夫曼编码(Huffman Coding)是一种数据压缩算法,由美国计算机科学家大卫·艾尔曼在1952年提出。它的主要原理是基于字符出现频率构建最优的二叉树,进而为每个字符生成最短的唯一编码,使得常用字符在编码过程中...
vc++哈夫曼压缩算法 vc++哈夫曼压缩算法
《哈夫曼压缩》是一种广泛应用于数据压缩领域的高效算法,由大卫·艾尔·哈夫曼在1952年提出。它属于一种基于字符频率的无损压缩方法,特别适用于压缩那些存在大量重复字符的数据。哈夫曼编码是哈夫曼压缩的核心,...
哈夫曼压缩是一种高效的数据压缩方法,它基于字符出现频率构建一种特殊的二叉树——哈夫曼树。在计算机科学中,尤其是信息处理和文件压缩领域,哈夫曼编码是广泛应用的技术之一。ASC II码是计算机中用8位二进制数...
哈夫曼编码是一种高效的数据压缩算法,由大卫·哈夫曼在1952年提出。它是基于贪心策略的,主要用于无损数据压缩。在本文中,我们将深入探讨哈夫曼编码的基本原理、实现过程以及如何在VC++环境下利用MFC(Microsoft ...
哈夫曼编码是一种高效的数据压缩方法,由大卫·哈夫曼在1952年提出。它是基于一种称为哈夫曼树(也叫最优二叉树)的数据结构。在这个课程设计中,你将深入理解哈夫曼编码的原理,并通过C++编程语言实现文件的压缩与...
Java哈夫曼编码是一种数据压缩技术,它基于哈夫曼树进行编码,通过构建最优的二叉树结构来实现高效的数据编码与解码。在Java中实现哈夫曼压缩和解压涉及到以下几个关键知识点: 1. **哈夫曼树**: 哈夫曼树...
它是基于字符频率(权重)构建最优二叉树的思想,通过创建一棵特殊的二叉树——哈夫曼树,对数据进行编码,从而实现数据的压缩。在C#中实现哈夫曼压缩,我们需要理解以下几个关键概念: 1. **字符频率统计**:在...
哈弗曼编码(Huffman Coding)是一种数据压缩算法,由美国计算机科学家大卫·艾尔文·哈弗曼在1952年提出。这个算法基于一种称为“最优二叉树”(也称哈弗曼树)的数据结构,主要用于对频率不同的字符进行编码,从而...
在Java中实现哈夫曼压缩涉及到的主要步骤包括统计字节频率、构建哈夫曼树以及生成哈夫曼编码。首先,我们需要创建一个字节类(`NodeData`)来表示每个字节及其对应的权重(频率)。下面我们将详细讲解这些步骤: 1....
### 哈夫曼压缩详解 #### 一、哈夫曼压缩概述 哈夫曼压缩是一种广泛应用于数据压缩领域的无损压缩技术。无损压缩意味着压缩后的数据在解压后可以完全恢复到原始状态,不丢失任何信息。哈夫曼编码通过构建一个特殊...
哈夫曼编码是一种高效的数据压缩方法,主要用于文本和图像数据的压缩。它的核心思想是根据数据出现的频率来分配不同的编码,频繁出现的字符用较短的编码,不常出现的字符用较长的编码,从而达到压缩数据的目的。在...
哈夫曼编码是一种高效的数据压缩方法,源自于1952年大卫·哈夫曼提出的一种最优二叉树构造算法。在IT领域,哈夫曼编码常用于文本、图像和其他数据的无损压缩,尤其在文件存储和传输中起到重要作用。C++作为一门通用...
每次选出权值最小且没有双亲的两个节点建立新的哈弗曼树。 无栈非递归遍历Huffman树,求Huffman编码。...要注意的是当文件较小时,不宜使用哈夫曼来进行压缩,此时文件头占比过大,会使压缩结果很差。
它的基本思想是通过构建一棵特殊的二叉树——哈夫曼树,来对数据进行编码,使得频繁出现的字符拥有较短的编码,而不常出现的字符则有较长的编码。这种编码方式可以极大地降低数据存储和传输所需的位数,从而实现文件...