2021年哈夫曼编码和译码系统(附源代码).docx

2021年哈夫曼编码和译码系统(附源代码).docx

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
精品word 可编辑资料 - - - - - - - - - - - - - 实 训 报 告 题 目: 哈夫曼编码和译码系统 院 系: 专 业: 姓 名: 学 号: 指导老师: 日 期: 1 / 28 第 1 页,共 28 页 - - - - - - - - - - 精品word 可编辑资料 - - - - - - - - - - - - - 目录 一. 需求分析 2 二. 概要设计 ) 建立哈夫曼树 、编码 3 ) 字符匹配 3 ) 哈夫曼树遍历 3 三. 具体设计及编码实现 3 四. 流程图 ) 总流程图 15 ) 编码实现流程图 16 ) 译码实现流程图 17 五. 调试分析 ( 1)运算权值 18 ( 1)生成哈夫曼树,建立编码表 18 ( 3)将输入字符编码 19 ( 4)输入新的字符串,进行译码 19 ( 5)输入新的二进制数将其译为字符 20 六. 系统保护 20 七.试验总结 20 八. 源代码 21 2 / 28 第 2 页,共 28 页 - - - - - - - - - - 精品word 可编辑资料 - - - - - - - - - - - - - 一.需求分析 《1》问题描述:在传送电文时,人们总是期望传送时间尽可能短,这就是 要求使电文代码长度尽可能短; 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本;但是,这要求在发送端通过一个编码系 统能够对待传输数据预先编码, 在接收端将传来的数据进行译码; 对于双工信道 (即可以双向传输信息的信道) ,每段都需要一个完整的编 /译系统;所以为这样的信息收发站写一个哈夫曼的编译码系统; 《2》打开一篇英文文章,统计该文章中每个字符显现的次数,然后以它们作为权值,对每一个字符进行编码,编码完成后再对其编码进行译码; 问题补充: 从硬盘的一个文件里读出一段英语文章; 统计这篇文章中的每个字符显现的次数; 以字符显现字数作为权值,构建哈夫曼树,并将哈夫曼树的储备 结构的初态和终态进行输出; 对每个字符进行编码并将所编码写入文件然后对所编码进行编译; 《3》这个哈夫曼编码译码主要是以英文字母输入进行编码与编译, 编码译码过程由系统自动完成, 人工操作部分就是电文的录入, 和编译出来时的读操作; 二.概要设计 3 / 28 第 3 页,共 28 页 - - - - - - - - - - 精品word 可编辑资料 - - - - - - - - - - - - - 本程序主要用到了三个算法; 哈夫曼树建立、编码 在初始化 〔I〕 的过程中间,要用输入的字符和权值建立哈夫曼树并求得哈夫曼编码;先将输入的字符和权值存放到一个结构体数组中,建立哈夫 曼树,将运算所得的哈夫曼编码储备到另一个结构体数组中; 串的匹配 在编码〔D〕 的过程中间, 要对已经编码过的代码译码, 可利用循环, 将代码中的与哈夫曼编码的长度相同的串与这个哈夫曼编码比较 哈夫曼遍历 在印哈夫曼树 〔T〕 的中,由于哈夫曼树也是二叉树,所以就要利用二叉树的先序遍历将哈夫曼树输出; 三.具体设计及编码实现 构造哈夫曼树的方法如下: 初始化:每个字符就是一个结点,字符的频度就是结点的权; 1、将结点按频度从小到大排序; 2、选取频度最小的两个结点,以它们为儿子,构造出一个新的结点;新结点 的权值就是它两个儿子的权值之和; 构造之后, 从原先的结点序列里删除刚才选出的那两个结点,但同时将新生成的结点加进去; 3、假如结点序列里只剩下一个结点,表示构造完毕,退出;否就回到第一步; 4 / 28 第 4 页,共 28 页 - - - - - - - - - - 精品word 可编辑资料 - - - - - - - - - - - - - 编码: 上面已经生成了树,接着就该对该树进行编码了; 可以假定,对某个结点而言,其左孩子在当前阶段的编码为 0,右孩子的编码为 1;这样就可以通过 “树的遍历 ”的方式来生成字符 ——编码对比表; 来到这里,基本上艰苦的已经完成了,对某个具体的字符串编码和解码就只是简洁的“查表 ——替换”的工作了; 译码: 译码也是个简洁的查表 -- 替换过程;假如利用该种编码发送字符串,就它的“字符——编码”对应表也必需发送过去,不然对方是不知道怎么解码的; 对给出的一串编码,从左向右,将编码组合起来并查表, “一旦”找到有匹配的字符,就立刻将当前的编码替换为对应的字符; 由于该编码是不会显现 ”某一个字符的编码是另一个字符编码的缀 ”这种情形的,也就是不会显现类似于 “A 00 B 0010” 这样的情形,所以译码出来的字符串是唯独的,而且就是原先进行编码

文档评论(0)

资料杂货铺 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档