- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE
PAGE 6
东华理工大学 软件学院 软件工程系
****课程设计报告
题目:哈夫曼树及其应用
学生姓名: 何昆
学 号: 201120180418
班 级: 1121804
指导教师: 张军
2013年 1 月 10 日
目录
需求分析说明 3
课程设计目的 3
课程设计题目 3
程序功能及需求说明 3
总体设计 4
哈夫曼树建立 4
哈夫曼编码 4
哈夫曼译码 4
详细设计 5
1. 算法设计 5
2. 类设计 5
实现部分 6
程序测试 9
总结 10
一、需求分析说明
1、课程设计目的
本课程设计的目的考察学生对常见数据结构及相关算法的综合应用能力,达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,解决实际问题中数据的合理存储表示,并根据相应的存储结构设计效率较高的算法实现对问题的求解;通过此次课程设计进一步培养学生良好的程序设计技巧和分析问题解决问题的能力。
2、课程设计题目:哈夫曼树及其应用(1).设计目的:熟悉树的各种存储结构及其特点及掌握建立哈夫曼树和哈夫曼编码的方法及带权路径长度的计算。
(2).设计内容:欲发一封内容为AABBCAB ……(共长 100 字符,其中:A 、B 、C 、D 、E 、F分别有7 、9 、12 、22 、23、27个)的电报报文,实现哈夫曼编码和译码。(3).设计要求:分析系统需求。
建立哈夫曼树。
进行哈夫曼编码,并求出平均编码长度。
译码,对编码好的内容进行译码。
程序功能及需求说明
功能:编码,编码长度,译码
要实现编码译码等功能,必须先建立一个哈夫曼树,编码长度、译码又通过编码求得。这里通过分别创建结点类(tree)和编码类(codetype),子函数有哈夫曼树建立(creathuffmantree),哈夫曼编码(arrangecode),哈夫曼译码(transcode),最后通过主函数调用执行。
二、总体设计
1.哈夫曼树建立
100
100
45
55
22
23
27
28
12
16
7
9
A--7
B--9
C--12
D--22
E--23
F--27
2.哈夫曼树编码(路径往左为0,往右为1)
7的编码: 1 1 1 0
7的编码: 1 1 1 0
9的编码: 1 1 1 1
12的编码:1 1 0
22的编码:0 023的编码:0 1
27的编码:1 0
带权路径长度:WPL=7*4+9*4+12*3+22*2+23*2+27*2
=244
平均编码长度为:4+5+5+6+6+7=33
3.哈夫曼树译码
假设发送的电报报文为:
假设发送的电报报文为:
1110110111110000110
则译码成原文为:
7 12 9 27 22 23 27
即“ACBFDEF”
三、详细设计
(1).建立哈夫曼树的算法:定义各节点类型其中应包含两类数据 一是权值域weight;一是指针域而指针域中应该包括指向左右孩子和指向双亲的指针这里分别用lchild、rdhild和parent来表示,在实际构造中由于是叶子节点来构造新的根节点其构造过程中仅与叶子节点的权重有关而与其数据域无关所以构造过程中不用考虑其数值域,并且在链表中从叶子开始存放,让后不断的将两颗最小权值的子树合并为一颗权值为其和的较大的子树,逐步生成各自内部节点直到树根。
(2).哈夫曼编码的算法:将建立的哈夫曼树从每个叶子节点开始沿着双亲域回到根节点,每走一步进行编码得到一位编码值;由于每个叶子节点的哈夫曼编码是从根节点到相应的叶子的路径的各个分支的代码组成的0和1序列,所以先得到了低位编码后得到高位编码因此可用一维数组从后向前来存放各位编码值,并用start来记录编码的起始位置。
(3).哈夫曼译码的算法:通过哈夫曼编码所得到的0和1序列路径,判断是左结点还是右结点的路径,从而译码得到权值内容。
(4).将建立的哈夫曼树、实现哈夫曼编码、哈夫曼译码都定义成子函数的形式,然后在主函数中调用它们。
两个类:
class tree{
class tree
{
public:
int weight;
int parent;
int lch,rch;
void creathuffmantree();
};
tree hftree[m+1]
文档评论(0)