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

上传人:汽*** 文档编号:465843675 上传时间:2023-05-28 格式:DOC 页数:20 大小:194.50KB
返回 下载 相关 举报
数据结构课程设计说明书哈夫曼编译码器_第1页
第1页 / 共20页
数据结构课程设计说明书哈夫曼编译码器_第2页
第2页 / 共20页
数据结构课程设计说明书哈夫曼编译码器_第3页
第3页 / 共20页
数据结构课程设计说明书哈夫曼编译码器_第4页
第4页 / 共20页
数据结构课程设计说明书哈夫曼编译码器_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《数据结构课程设计说明书哈夫曼编译码器》由会员分享,可在线阅读,更多相关《数据结构课程设计说明书哈夫曼编译码器(20页珍藏版)》请在金锄头文库上搜索。

1、课 程 设 计 说 明 书 课程名称: 数据结构 设计题目: 哈夫曼编/译码器 学 院: 计算机科学与信息工程学院 学生姓名: 学生学号: 专业班级: 网络工程13-01 指导教师: 2015年 6月 25日课 程 设 计 任 务 书设计题目哈夫曼编/译码器学生姓名申恒恒所在院部计算机科学与信息工程学院专业、班级网络工程13-1设计要求:1、根据哈夫曼树编码原理,构造哈夫曼树,创建一套哈夫曼编码;2、读取文本文件,并对文件内容编码,生成编码文件;3、对编码文件进行译码,获得恢复文件;4、比较恢复文件和原文件是否相同。学生应完成的工作:1. 学生应认真学习参考程序,理解每个文件、每个函数以及各个

2、变量的作用和意义。在此基础上进一步改进程序,最后正确地运行程序。2. 对程序进行测试,设计详细的测试计划,然后根据测试计划设计测试用例,对程序进行测试。测试时应注意对各种边缘情况进行测试。3. 完成课程设计报告。参考文献:1. 严蔚敏 数据结构(C语言版) 清华大学出版社 20112. 谭浩强 C程序设计(第四版) 清华大学出版社2010工作计划:1. 小组审题,查阅资料,进行设计前的必要资料准备(3天)。 2. 把程序完整运行出来(4天)。 3. 增加改进程序(3天)。 4. 写课程设计报告(3天)。 5. 提交课程设计报告及答辩(1天)任务下达日期:2015 年 6 月 9 日 任务完成日

3、期:2015 年 6 月 22 日指导教师(签名): 学生(签名):申恒恒哈夫曼编/译码器摘 要:采用哈夫曼编码思想实现对字符串的编码,以及对编码的解码。字符串的长度不小于5000字节。读取要编码的文本文件,将文件的内容进行编码,生成新的文件。对编码文件进行解码,获得文本文件。将译码的文本文件和原文件进行比较,恢复文件和原文件必须完全一致。关键词:哈夫曼编码 哈夫曼译码 解码目 录哈夫曼编/译码器21. 设计背景41.1程序的功能41.2输入输出的要求42.设计方案52.1程序结构52.2数据结构53. 方案实施63.1详细设计63.2 调试分析63.2.1 发现问题63.2.2 逐步解决问题

4、63.2.3 代码实现过程73.3 核心源程序清单124. 结果与结论144.1程序运行结果图144.2结论与心得体会155. 参考文献161. 设计背景1.1程序的功能(1) 从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树并将它存于文件hfmTree中.将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上;(2) 利用已经建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中,并输出结果,将文件CodeFile以紧凑格式先是在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodeP

5、rint中;(3) 利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中,并输出结果。1.2输入输出的要求先在执行文件的同根目录下创建abc.txt文件,在abc文件中输入各字母及相应的权值。测试数据:字符空格ABCDEFGHIJKLM频度1866413223210321154757153220字符NOPQRSTUVWXYZ频度57631514851802381811612.设计方案2.1程序结构 2.2数据结构typedef struct int weight; /权重 int parent,lchild,rchild; /父亲节点,左孩子,右孩子HTN

6、ode,* HuffmanTree; /定义节点和哈夫曼树结构体3. 方案实施3.1详细设计初始化哈夫曼链表: void Initialization();输入带编码的字符并写入文件:void InputCode();编码: Encoding();译码: Decoding(); 打印编码:Code_printing();3.2 调试分析3.2.1 发现问题如何根据输入的字符和使用频率构建哈夫曼树并得到它的哈夫曼编码?3.2.2 逐步解决问题哈夫曼树是什么?给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)

7、。如何构建哈夫曼树?假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、wn,则哈夫曼树的构造规则为:(1) 将w1、w2、,wn看成是有n 棵树的森林(每棵树仅有一个结点);(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;(3)从森林中删除选取的两棵树,并将新树加入森林;(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。哈夫曼编码是什么?哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于195

8、2年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长 度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。如何得到哈夫曼编码?通过从哈夫曼树根结点开始,对左子树分配代码“0”,右子树分配代码“1”,一直到达叶子结点为止,然后将从树根沿每条路径到达叶子结点的代码排列起来,便得到了哈夫曼编码。3.2.3 代码实现过程/ -哈夫曼编码- / w存放n个字符的权值(均0),构造哈夫曼树HT,并求出n个字符的哈夫曼编码HCvoid HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n) int m,i,s1,s2

9、,start; int c,f; HuffmanTree p; char *cd; if(n=1)return; /检测结点数是否可以构成树 m=2*n-1; /需要构造多少个顶点 HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); /0号单元未用 for(p=HT+1,i=1;iweight=*w; p-parent=0; p-lchild=0; p-rchild=0; for(;iparent=0; for(i=n+1;i=m;+i) / 建哈夫曼树 select(HT,i-1,s1,s2); / 在HT1i-1中选择parent为0且weight最小的

10、两个结点,其序号分别为s1和s2 HTs1.parent=HTs2.parent=i; /建立父亲节点 HTi.lchild=s1; /初始化左右孩子节点 HTi.rchild=s2; HTi.weight=HTs1.weight+HTs2.weight; /把孩子节点的权值累加到父亲节点 HC=(HuffmanCode)malloc(n+1)*sizeof(char*); / 从叶子到根逆向求每个字符的哈夫曼编码 cd=(char*)malloc(n*sizeof(char); / 分配n个字符编码的头指针向量(0不用) cdn-1=0; / 编码结束符 for(i=1;i=n;i+) / 逐个字符求哈夫曼编码 start=n-1; / 编码结束符位置 for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent) / 从叶子到根逆向求

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

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