- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【精选】实验四 赫夫曼
目 录
1.概述 1
1.1问题描述 1
2.现状分析 1
3.系统分析 1
4.1系统功能模块图 2
5.1赫夫曼树的存储结构定义 3
5.2赫夫曼算法及其实现 3
5.3统计字符串中字符的种类以及各类字符的个数 3
5.4赫夫曼编译码系统功能模块 3
6.主要代码结构 4
6.1定义赫夫曼编码类型如下 4
6.2赫夫曼编码算法 4
6.3建立正文的编码文件 5
7.主要代码段分析 6
7.1赫夫曼编码的结构定义 6
7.2赫夫曼编码算法 6
8.运行与测试 7
8.1 测试数据及结果 7
9.总结和心得 8
参考文献 8
10.附:源代码 9
1.概述
1.1问题描述
利用赫夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。这要求在发送端通过一个编码系统对待传输数据预先编码,对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编码系统。
2.现状分析
在当今信息爆炸时代,如何采用有效的数据压缩技术节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视,赫夫曼编码正是一种应用广泛且非常有效的数据压缩技术。赫夫曼编码是一种编码方式,以赫夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。赫夫曼编码使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。赫夫曼编码的应用很广泛,利用赫夫曼树求得的用于通信的二进制编码称为赫夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个叶子对应的字符的编码,这就是赫夫曼编码。赫夫曼译码输入字符串可以把它编译成二进制代码,输入二进制代码时可以编译成字符串. 赫夫曼编码是已被证明的一种有效的熵编码方式, 在诸如文本、图像、视频压缩及通信、密码等信息压缩编码标准中被广泛使用。目前广泛应用的许多其他高效数据压缩算法。
3.系统分析
利用二叉树结构实现赫夫曼编/解码器。 基本要求:
1、 初始化:能够对输入的任意长度的字符串进行统计,统计每个字符的频度,并建立赫夫曼树。
2、 建立编码表(CreateTable):利用已经建好的赫夫曼树进行编码,并将每个字符的编码输出。
3、 编码(Encoding):根据编码表对输入的字符串进行编码,并将编码后的字符串输出。
4、 译码(Decoding):利用已经建好的赫夫曼树对编码后的字符串进行译码,并输出译码结果。
4.概要设计
4.1系统功能模块图
赫夫曼编\译码器的主要功能是先建立赫夫曼树,然后利用建好的赫夫曼树生成赫夫曼编码后进行译码 。 在数据通信中,经常需要将传送的文字转换成由二进制字符0、1组成的二进制串,称之为编码。构造一棵赫夫曼树,规定赫夫曼树中的左分之代表0,右分支代表1,则从根节点到每个叶子节点所经过的路径分支组成的0和1的序列便为该节点对应字符的编码,称之为赫夫曼编码。 最简单的二进制编码方式是等长编码。若采用不等长编码,让出现频率高的字符具有较短的编码,让出现频率低的字符具有较长的编码,这样可能缩短传送电文的总长度。赫夫曼树课用于构造使电文的编码总长最短的编码方案。
4.1系统功能模块图
5.详细设计
5.1赫夫曼树的存储结构定义
#define n 100//叶子结点数
#define m 2*n-1//赫夫曼树中结点总数
typedef struct{
int weight;//权值
int lchild,rchild,parent;//左右孩子及双亲指针
}HTNode;//树中结点类型
typedef HTNode HuffmanTree[m+1];//零号单元不用
5.2赫夫曼算法及其实现
①根据给定的n 个权值{w1, w2 ,···wn }, 构成n 棵二叉树的集F={T1,T2 ,···Tn }, 其中每棵二叉树Ti 中只有一个带权为wi 的根结点,其左右子树均空。
②在F 中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树, 且置新的二叉树的根结点的权值为其左、右子树上根结点的权值之和。
③在F 中删除这两棵树, 同时将新得到的二叉树加入F 中。
④重复②和③, 直到F 只含一棵树为止, 这棵树便是赫夫曼树。
5.3统计字符串中字符的种类以及各类字符的个数
该算法的主要实现思想是:先定义一个含有26个元素的临时整型数组,用来存储各种字母出现的次数。因为大写字母与小写字母相差64位,所以在算法中我们可以使用字母减去64作为统计数组的下标对号入座。在统计和保存过程中,我们用一个循环来判断先前统计的各类字符是否为零,若不为零,则将其存入一个数组对应得元素中,同时将其对应的字符也存入另一个数组元素中
您可能关注的文档
- 【精选】宁夏宁大附中2012-2013学年高二上学期期末考试语文试题 Word版含答案.doc
- 【精选】宁夏宁大附中2012-2013学年高二上学期期末考试物理试题 Word版含答案.doc
- 【精选】宁夏宁大附中2013届高三第一次.doc
- 【精选】宁夏宁大附中2012-2013学年高二上学期期末考试历史试题 Word版含答案.doc
- 【精选】宁夏银川九中高三年级语文试题.doc
- 【精选】宁大附中2013届高三第一次模拟考试.doc
- 【精选】宁夏银川一中2012届高三第一次模拟试题--语文.doc
- 【精选】宁建美语文第四单元教案.doc
- 【精选】宁德ERP产品剖析.pdf
- 【精选】宁家沟之行.doc
文档评论(0)