数据结构课程设计-赫夫曼编码讲义

上传人:今*** 文档编号:105836314 上传时间:2019-10-13 格式:DOC 页数:22 大小:641.50KB
返回 下载 相关 举报
数据结构课程设计-赫夫曼编码讲义_第1页
第1页 / 共22页
数据结构课程设计-赫夫曼编码讲义_第2页
第2页 / 共22页
数据结构课程设计-赫夫曼编码讲义_第3页
第3页 / 共22页
数据结构课程设计-赫夫曼编码讲义_第4页
第4页 / 共22页
数据结构课程设计-赫夫曼编码讲义_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《数据结构课程设计-赫夫曼编码讲义》由会员分享,可在线阅读,更多相关《数据结构课程设计-赫夫曼编码讲义(22页珍藏版)》请在金锄头文库上搜索。

1、 数据结构与算法 课程设计(2012/2013学年第一学期19周)指导教师: 王敏丽 杨东鹤 班级:计算机科学与技术1班 学号:* 姓名:程*远一、题目数据结构与算法课程设计任务书数据结构与算法是计算机专业重要的核心课程之一,在计算机专业的学习过程中占有非常重要的地位。数据结构与算法课程设计就是要运用本课程以及到目前为止的有关课程中的知识和技术来解决实际问题。特别是面临非数值计算类型的应用问题时,需要选择适当的数据结构,设计出满足一定时间和空间限制的有效算法。本课程设计要求同学独立完成一个较为完整的应用需求分析。并在设计和编写具有一定规模程序的过程中,深化对数据结构与算法课程中基本概念、理论和

2、方法的理解;训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念;使自己的程序设计与调试水平有一个明显的提高。 赫夫曼编码/译码器1. 问题描述利用赫夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。这要求在发送端通过一个编码系统对待传输数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站编写一个赫夫曼码的编/译码系统。2. 基本要求一个完整的系统应具有以下功能:(1) I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建

3、立赫夫曼树,并将它存于文件hfmTree中。(2) E:编码(Encoding)。利用已建好的赫夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。(3) D:译码(Decoding)。利用已建好的赫夫曼树将文件CodeFile中的代码进行译码,结果存入文件Textfile中。以下为选做:(4) P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。(5) T:印赫夫曼树(Tree printing)。将已在内存中的赫夫曼树以

4、直观的方式(比如树)显示在终端上,同时将此字符形式的赫夫曼树写入文件TreePrint 中。3. 测试要求(1) 已知某系统在通信联络中只可能出现八种字符,其频率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计赫夫曼编码。(2) 用下表给出的字符集和频度的实际统计数据建立赫夫曼树,并实现以下报文的编码和译码:“THIS PROGRAME IS MY FAVORITE”。字符ABCDEFGHIJKLM频度1866413223210321154757153220字符NOPQRSTUVWXYZ频度57631514851802381811614. 实现提示(

5、1) 编码结果以文本方式存储在文件Codefile中。(2) 用户界面可以设计为“菜单”方式:显示上述功能符号,再加上“Q”,表示退出运行Quit。请用户键入一个选择功能符。此功能执行完毕后再显示此菜单,直至某次用户选择了“Q”为止。(3) 在程序的一次执行过程中,第一次执行I,D或C命令之后,赫夫曼树已经在内存了,不必再读入。每次执行中不一定执行I命令,因为文件hfmTree可能早已建好。二、需求分析(1) I:初始化(Initialization)。根据给出的信息,构造一颗哈夫曼树,并得到每个字符对应的哈夫曼码,同时存入文件hfmTree中。(2) E:编码(Encoding)。利用已建好

6、的赫夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。(3) D:译码(Decoding)。利用已建好的赫夫曼树将文件CodeFile中的代码进行译码,结果存入文件Textfile中。(4) P:打印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。(5) T:打印赫夫曼树(Tree printing)。将已在内存中的赫夫曼树以直观的方式(比如树)显示在终端上,同时将此字符形式的赫夫曼树写入文件TreePrint 中。三、设计

7、概要1、总体流程图:哈夫曼树编码建立哈夫曼树编码译码打印代码文件打印赫夫曼树退出2、 建立哈夫曼树 建立哈夫曼树输入字符及权值建立哈夫曼树并把哈夫曼码写入hfmTree 输出每个字符的哈夫曼码 结 束3、 编码 因为可能事先已经运行过I:建立哈夫曼树 操作,所以hfmTree可能已经存在每个字符的哈夫曼码。 编码 Y: 通过hfmTree中的哈夫曼树进行编码输入要编码的字符串 将码值写入CodeFile 结 束判断hfmTree中是否有树 N:通过内存中的哈夫曼树进行编码4、 译码 编码 Y: 通过hfmTree中的哈夫曼码进行译码从文件CodeFile读入要译的代码 将译码写入Textfil

8、e 结 束判断hfmTree中是否有树 N:通过内存中的哈夫曼码进行译码5、 打印代码 结 束 从文件CodeFile读入代码 打印代码 按每行50将代码输出在界面四、详细设计1、建立哈夫曼树/-初始化-int min(HfmTeee &t,int x) /查找权值最小的树 int flag; int k=999999999; for(int i=1;i=x;i+) if(ti.weightk&ti.parent=0) k=ti.weight; flag=i; tflag.parent=1; return flag; void Find(HfmTeee &H,int x,int *p1,int *p2) /查找权值最小的两棵树

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号