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

哈夫曼压缩思路

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

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

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

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

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

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


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

相关推荐

    哈夫曼压缩算法(源代码+实现报告)

    在哈夫曼压缩算法中,首先需要统计输入文件中每个字符出现的频率。然后,使用这些频率构建哈夫曼树。构建哈夫曼树的过程是通过不断合并频率最低的两个节点来完成的,直到所有节点都合并成一个大树,这个过程也称为...

    利用C++实现哈夫曼算法

    哈夫曼算法是数据压缩的一种重要算法,它的主要思想是构造一棵哈夫曼树(二叉树),其基本思路是,每次从字符中挑出两个频率最低的,然后构造一个新的结点,使新结点的左右孩子指针分别指向那两个节点。哈夫曼算法的...

    114243 用哈夫曼编码实现文件压缩 doc

    标题中提到的"114243 用哈夫曼编码实现文件压缩 doc"是一份实验报告,描述了如何使用哈夫曼编码来实现文件的压缩。哈夫曼编码是一种数据编码方法,常用于无损数据压缩,它通过为出现频率较高的字符分配较短的编码,...

    哈夫曼编码(压缩文件),c/c++课程设计

    7. **讲解答辩PPT**:这部分可能包含对哈夫曼编码的理论介绍、程序设计思路、实现细节以及实验结果的展示,用于在课程设计答辩时向老师和同学解释项目。 通过这个课程设计,学生不仅能掌握哈夫曼编码的基本概念,还...

    华北科技学院-《数据结构》-哈夫曼压缩-实验报告.pdf

    《数据结构》课程中,哈夫曼压缩是一个重要的实验项目,主要目的是让学生理解和掌握文件压缩的基本原理和方法。哈夫曼编码是一种高效的前缀编码方式,广泛应用于数据压缩领域,尤其是文本压缩。以下是对这个实验报告...

    哈夫曼算法实现文件夹的压缩与解压

    所以想在这里把自己的一些想法和思路写下来,供大家交流与参考。因为自己目前正在读大二,这也是自己写的第一篇CSDN博客,之前只学过C与C++,java是纯自学的,并且这也是用java写的第一个PJ,所以写得比较烂,希望有...

    哈夫曼编码译码器 C语言 数据结构课设

    此外,项目中可能还包括一个设计报告,详细解释了项目的实现思路、算法原理、程序结构和功能测试等内容,这对于理解和学习哈夫曼编码有极大的帮助。 总之,这个C语言的哈夫曼编码译码器实例是深入理解数据结构和...

    哈夫曼编码译码器源代码和报告

    哈夫曼编码是一种高效的数据压缩方法,主要用于无损数据压缩,尤其在文本、图像和音频文件的处理中广泛应用。它的核心思想是通过构建一棵特殊的二叉树(哈夫曼树)来为每个输入符号分配一个唯一的前缀编码,使得频繁...

    哈弗曼树的文件压缩和解压实验报告(C语言源代码)

    ##### 4.1 程序设计思路 - **主函数**:负责读取用户输入,调用压缩或解压缩函数。 - **压缩函数**:实现文件的压缩处理。 - **解压函数**:实现文件的解压缩处理。 - **辅助函数**:如`select`函数用于选取权值...

    自适应哈夫曼树.rar

    自适应哈夫曼编码是一种动态构建的哈夫曼树算法,常用于数据压缩。它根据输入数据的变化实时调整树的结构,确保了编码的效率和灵活性。在C++实现中,自适应哈夫曼编码通常包括以下几个关键步骤: 1. **数据频率统计...

    C++课程设计:哈夫曼算法的文件压缩程序

    2. **设计思路**:描述构建哈夫曼树、生成编码、压缩和解压缩的具体步骤。 3. **算法实现**:详细解释每个关键部分的C++代码实现,包括数据结构的选择和函数的设计。 4. **性能评估**:通过实验比较不同文件的压缩比...

    哈夫曼编码 数据结构课程设计

    哈夫曼编码是一种高效的数据压缩方法,源自于数据结构中的树形数据结构——哈夫曼树。在数据处理和通信领域,它被广泛应用于文本、图像等数据的压缩,以减少存储空间和传输时间。本课程设计的目标是通过实践操作,使...

    c语言编写哈夫曼树

    哈夫曼树,又称最优二叉树或最小带权路径长度树,是数据结构中一种特殊的二叉树,主要用于数据的编码压缩。在C语言中实现哈夫曼树,可以帮助初学者深入理解数据结构和算法,特别是对于压缩和编码的概念。下面我们将...

    哈夫曼编码(c语言)

    本篇文章将基于提供的C语言代码片段,详细解析哈夫曼编码的实现原理、构造思路以及在不同格式文件压缩与解压中的应用。 #### 核心知识点 1. **哈夫曼树的构建** - 在给定的数据集中,首先统计每个字符的出现次数...

    哈夫曼编码译码器,并附有实验报告

    哈夫曼编码是一种高效的数据压缩方法,源自于数据结构中的二叉树理论,由David A. Huffman在1952年提出。它主要用于无损数据压缩,尤其在文本、图像和音频文件的压缩中有着广泛的应用。哈夫曼编码器是实现哈夫曼编码...

    java哈夫曼编码译码器

    **哈夫曼编码**是一种广泛应用的数据压缩技术,尤其在信息存储与传输方面扮演着重要角色。随着信息技术的发展,数据量呈指数级增长,如何有效地压缩这些数据成为了一个重要的课题。哈夫曼编码通过根据字符出现的概率...

    数据结构课程设计哈夫曼编译码器

    哈夫曼编码是一种高效的数据压缩方法,常用于无损数据压缩。在数据结构课程中,哈夫曼编码器是学生必须掌握的重要知识点之一。它基于频度优先的策略构建哈夫曼树,进而生成对应的编码,使得频繁出现的字符拥有较短的...

    数据结构哈夫曼实验报告

    哈夫曼编码是一种高效的无损数据压缩方法,由数据结构中的赫夫曼树(Huffman Tree)衍生而来。在本实验报告中,我们将深入探讨哈夫曼编码的原理,以及如何通过编程实现哈夫曼树的构建和编码的生成。 哈夫曼编码的...

Global site tag (gtag.js) - Google Analytics