哈夫曼编码译码报告讲述.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
烟台大学计算机与控制工程学院 课 程 设 计 (数据结构与OOP) 设计题目: 班 级 姓 名 学 号 指导教师 成 绩 年 月 日 目录 1 题目 3 1.1 问题描述 3 1.2 基本要求 3 1.3 进一步完成 3 2 内容 3 2.1 基本需求 3 2.2. 我的设计 4 3 算法设计 4 3.1 数据的存储结构 4 3.1.1 存放哈夫曼树的存储结构: 4 3.1.2 存放哈夫曼编码的存储结构: 4 3.1.3 存放哈夫曼树每个节点位置的存储结构: 5 3.2 生成哈弗曼树的算法 5 3.3 生成哈弗曼编码的算法 7 3.4 译码的算法 9 3.5 打印哈弗曼树的算法 10 3.6 其他算法 11 4 程序正确性验证 11 4.1 输入数据的控制 11 4.2 打印哈弗曼树 12 4.3 哈弗曼编码 12 4.4 哈弗曼译码 13 5 遇到的问题 13 6 课程设计的主要收获 13 7 对今后课程设计的建议 13 1 题目 1.1 问题描述 设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理项目,直到选择退出为止。1.2 基本要求 1) 将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目中 2) 分别采用动态和静态存储结构 3) 初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树4) 编码:利用建好的哈夫曼树生成哈夫曼编码5) 输出编码6) 设字符集及频度如下表: 字符 空格 A B C D E F G H I J K L M 频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20 字符 N O P Q R S T U V W X Y Z 频度 57 63 15 1 48 51 80 23 8 18 1 16 1 1.3 进一步完成1) 译码功能2) 显示哈夫曼树3) 界面设计的优化 2.1 基本需求 编写一个文本比如利用电报机发送信息时,需要将成“00110111001”这样的二进制的字符串对一段密文进行译码,比如在接收电报后,需要对“0101110100101”通过标准成看得懂的文字信息。 还有一些辅助功能,比如可以打印一些简单的哈夫曼树主菜单的操作界面文件的读写。 设计 哈夫曼编码/译码器功能:、手动、文件退出。:基本的编码,打印简单的哈夫曼树。输入个字符和N个权值每个字符对应的打印注意此功能只是对哈夫曼编码的初探完成生成哈夫曼树和哈夫曼编码的并没有实现文件的编码 文件编码:对一个特定的文件进行编码,注意编码标准可以使用.txt中的默认也可以使用自己定义的。 :手动输入的密文进行译码,译码标准自定义或 文件译码:存放密文的文件进行译码,译码的就是在密文的。 :器结束。 3.1 数据的存储结构3.1.1 存放哈夫曼树的{ char data; //节点代表的字符 int weight; //权值 int parent; //父节点 int lchild; //左孩子节点 int rchild; //右孩子节点 }HTNode; 3.1.2 存放哈夫曼编码的结构: //存放编码 { char cd[60]; // int start; //编码在数组中的开始下标 }HCode; 3.1.3 存放哈夫曼的结构:{ char data; int n;//在完全二叉树中的位置序号 }tree; 此存储结构的主要目的是记录哈弗曼树的每一个节点在完全二叉树上的位置序号,便于输出哈弗曼树的大致图形。 3.2 生成哈弗曼树的算法 算法思想:先将存有每个节点权值和数据的数组初始化,将每个节点的左右节点和父节点初始化为-1,保证每个节点都是独立的。假设有n 个节点,在建树时需要比较n-1次;在每一次的比较中,先找出两个权值最小的节点,将这两个节点作为孩子节点形成一个双亲节点并修改相应的属性值,形成的双亲节点的权值等于两孩子节点的和,双亲节点继续参加下一次的比较。最后得到的那个节点就是树的根节点。 算法流程图: 代码实现: void CreateHT(int n,HTNode ht[60])//构造哈夫曼树 { int i,k,lnode,rnode; int min1,min2; for(i=0;i2*n-1;i++) { ht[i].parent=ht[i].lchild=

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档