数据结构哈夫曼树的构造及其应用课程设计实验报告.doc
《数据结构哈夫曼树的构造及其应用课程设计实验报告.doc》由会员分享,可在线阅读,更多相关《数据结构哈夫曼树的构造及其应用课程设计实验报告.doc(13页珍藏版)》请在沃文网上搜索。
1、数 据 结 构 课 程 设 计设计题目: 哈夫曼树的构造及其应用 10课题名称哈夫曼树的构造及其应用学 号姓 名成 绩课题设计目的与设计意义1、 课题设计目的:(1)巩固构造哈夫曼树的算法。(2)设计算法实现哈夫曼树及哈夫曼编码的构造。2、课题设计意义: (1)通过设计此课程,让我对哈夫曼树有了更深的了解。 (2)通过设计此课程,让我们对老师课上的讲述有了更深的理解,让所学有所思。(3)哈夫曼树的编译码具体应用在生活中,使我们明白了数据结构这一课程在实际生活中具有重要意义。指导教师:年 月 日 目 录第一章 哈夫曼树的基本术语111路径和路径长度11.2树的带权路径长度113哈夫曼树的定义1第
2、二章 哈夫曼树的构造22.1哈夫曼树的构造2第三章 哈夫曼树的存储结构及哈夫曼算法的实现33.1哈夫曼树的存储结构33.2 哈夫曼算法的简要描述3第四章 哈夫曼树的应用54.1哈夫曼编码54.2求哈夫曼编码的算法54.21思想方法54.22字符集编码的存储结构及其算法描述64.3哈夫曼树和编码程序实现:64.4程序运行结果:9心得体会10参考文献10 第一章 哈夫曼树的基本术语11路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或子孙结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。1.2结点的权及带权路径长度 若将
3、树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。 1.2树的带权路径长度树的带权路径长度(Weighted Path Length of Tree):也称为树的代价,定义为树中所有叶结点的带权路径长度之和,通常记为:其中:n表示叶子结点的数目wi和li分别表示叶结点ki的权值和根到结点ki之间的路径长度。13哈夫曼树的定义在权为wl,w2,wn的n个叶子所构成的所有二叉树中,带权路径长度最小(即代价最小)的二叉树称为最优二叉树或哈夫曼树。例给定4个叶子结点a,b,c和d,分别带权7,5,2和4。构造如下图所示
4、的三棵二叉树(还有许多棵),它们的带权路径长度分别为:(a)WPL=7*2+5*2+2*2+4*2=36(b)WPL=7*3+5*3+2*1+4*2=4(c)WPL=7*1+5*2+2*3+4*3=35其中(c)树的WPL最小,可以验证,它就是哈夫曼树。 第二章 哈夫曼树的构造abcd2.1哈夫曼树的构造 (a)初始森林abcd 6 7 5 2 4 (b)c与d合并 abcdabcd 18 7 11 7 11 5 6 6 5 2 2 4 4 图1 哈夫曼树的构造过程 假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1,w2,wn,则哈夫曼树的构造规则为:(1) 将w1,
5、w2,wn看成是有n 棵树的森林(每棵树仅有一个结点);(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;(3)从森林中删除选取的两棵树,并将新树加入森林;(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为我们所求得的哈夫曼树。下面给出哈夫曼树的构造过程,假设给定的叶子结点的权分别为1,5,7,3,则构造哈夫曼树过程如下图所示。从图中可知,n 个权值构造哈夫曼树需n-1次合并,每次合并,森林中的树数目减1,最后森林中只剩下一棵树,即为我们求得的哈夫曼树。第三章 哈夫曼树的存储结构及哈夫曼算法的实现3.1哈夫曼
6、树的存储结构用一个大小为2n-1的向量来存储哈夫曼树中的结点,其存储结构为:#define n 100 /叶子数目#define m 2*n-1/树中结点总数typedef struct /结点类型float weight; /权值,不妨设权值均大于零int lchild,rchild,parent; /左右孩子及双亲指针HTNode;typedef HTNode HuffmanTreem;/HuffmanTree是向量类型因为C语言数组的下界为0,故用-1表示空指针。树中某结点的lchild、rchild和parent不等于-1时,它们分别是该结点的左、右孩子和双亲结点在向量中的下标。这里设
7、置parent域有两个作用:其一是使查找某结点的双亲变得简单;其二是可通过判定parent的值是否为-1来区分根与非根结点。3.2 哈夫曼算法的简要描述在上述存储结构上实现的哈夫曼算法可大致描述为(设T的类型为HuffmanTree):(1)初始化将T0m-1中2n-1个结点里的三个指针均置为空(即置为-1),权值置为0。(2)输人读人n个叶子的权值存于向量的前n个分量(即T0n-1)中。它们是初始森林中n个孤立的根结点上的权值。(3)合并对森林中的树共进行n-1次合并,所产生的新结点依次放人向量T的第i个分量中(nim-1)。每次合并分两步:在当前森林T0i-1的所有结点中,选取权最小和次小
8、的两个根结点p1和Tp2作为合并对象,这里0p1,p2i-1。 将根为Tp1和Tp2的两棵树作为左右子树合并为一棵新的树,新树的根是新结点Ti。具体操作:将Tp1和Tp2的parent置为i,将Ti的lchild和rchild分别置为p1和p2新结点Ti的权值置为Tp1和Tp2的权值之和。注意:合并后Tpl和Tp2在当前森林中已不再是根,因为它们的双亲指针均已指向了Ti,所以下一次合并时不会被选中为合并对象。第四章 哈夫曼树的应用4.1哈夫曼编码通信中,可以采用0,1的不同排列来表示不同的字符,称为二进制编码。而哈夫曼树在数据编码中的应用,是数据的最小冗余编码问题,它是数据压缩学的基础。若每个
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 哈夫曼树 构造 及其 应用 课程设计 实验 报告
