ImageVerifierCode 换一换
格式:DOC , 页数:14 ,大小:858.50KB ,
资源ID:13079688      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13079688.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(哈夫曼树毕业论文(修改版)Word文档下载推荐.doc)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

哈夫曼树毕业论文(修改版)Word文档下载推荐.doc

1、3.1 用于最佳判断过程(6)3.2 用于通信编码(7)4 C+程序实现(8)5 总结(11)参考文献(11)二、附录1. 开题报告(13)2. 结题报告(14)3. 答辩报告(15)哈夫曼树及其应用(宝鸡文理学院 数学系,陕西 宝鸡 721013)摘 要:简要介绍了哈夫曼树的相关概念,阐述了哈夫曼树的基本原理,探讨了它在相关领域的实际应用,并采用C+对其进行了算法实现.关键词:哈夫曼树;二叉树;带权路径长度;根结点;叶结点哈夫曼树是由哈夫曼于1951年所创立并改进的,他本人也根据哈夫曼树提出了相应的编码.由于哈夫曼树是具有最小加权路径长度的二叉树,故哈夫曼编码能产生较短的码文.基于这个优势,

2、在信息化高度发达的当今社会,对信息的传递也有着较高要求的我们,希望信息在传递过程中,能够保持节省性和保密性,哈夫曼编码则很好的满足了这方面的要求,因而对其的研究是相当有必要的.1 哈夫曼树1.1 哈夫曼树的基本概念首先要了解树的概念.树是一种数据结构,是由一个或多个结点组成的有限集合.因其存放方式颇像一棵树又有树杈,因而称其为树.现简要介绍一下相关概念.定义1.1 在一棵树中,从一个结点往下可以达到的孩子或子孙结点之间的通路,称为路径.定义1.2 若将树中结点都赋给一个具有某种含义的数值,则这个数值称为该结点的权.定义1.3 由根结点到所有叶结点的路径长度之和称为二叉树的路径长度.定义1.4

3、从根结点到叶结点的路径长度与相应结点权值之积的和叫做二叉树的带权路径长度.定义1.5 最优二叉树,也称哈夫曼树,实质是对一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树.如果二叉树中的叶结点都具有一定的权值,则可将这一概念推广,设二叉树有个带权值的叶结点,那么,二叉树的带权路径长度应记为:,其中为第个叶结点的权值;为第个叶结点的路径长度.现用下图解释上述相关概念 图在图中,即为根结点,而则为叶结点,若的权值分别为则二叉树路径长度为2,二叉树的带权路径长度为7,即.例 下面我们结合实例来说明哈夫曼树.如果我们给定叶子结点的个数及每个叶子结点的权值构造出若干棵形态各异的二叉树如图所示,

4、其中根结点和叶结点之间的数字表示各叶子结点的权值. 按照的计算方法,经过计算比较后,我们发现,图的值最小,它即为哈夫曼树.由此可见,由相同权值的一组叶子结点所构成的二叉树有不同的形态和不同的带权路径长度.那么如何找到带权路径长度最小的二叉树呢?根据哈夫曼树的定义,一棵二叉树要使其值最小,必须使权值越大的叶结点越靠近根结点,而权值越小的叶结点越远离根结点,这样计算树的带权路径长度时,自然树会具有最小的带权路径长度,这是生成算法的一种基本思想.1.2 哈夫曼算法证明定理1 如果是带权的哈夫曼树,其中我们有下述结论成立. (1)若和是兄弟,则; (2)和是兄弟,且在所有分支点中,的层数最大; (3)

5、将带权的分支点改为带权的树叶,得带权为的树,则也是哈夫曼树.证明:(1) 由顶点的层数定义即知结论显然成立. (2) 若只有2片树叶,则,和是兄弟,是和的父亲,也是根,是唯一的分支点.设,在所有分支点中,的层数最大,的两个儿子分别是和,则,.假如,将和互换,得到新的树,记为, 因为,当时,此时显然是兄弟,从而只需考虑的情形,于是有这与是哈夫曼树矛盾,所以.同理可证明,因此.这样分别是和,否则将分别与互换,得到一棵树,但与是哈夫曼树矛盾.(3) 首先可知.假设不是哈夫曼树,是带权的哈夫曼树.在中以的两个儿子和为树叶,成为分支点,得到一棵带权的二叉树,则因为和都是带权的二叉树,而是哈夫曼树,所以.

6、假如,则这与是带权的哈夫曼树矛盾,因此.即为带权的哈夫曼树.2 哈夫曼算法构造哈夫曼树,实质是对一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树.尽管哈夫曼树可以通过比较后得出,可是在运算过程中往往会出现一些问题,使其实现起来并不容易,因而我们可以应用编程来有效地解决这个问题.2.1 哈夫曼树的构造算法为了构造权值为的哈夫曼树,哈夫曼提出了一种构造算法,现将其陈述如下:步骤1 根据题目给定的个权值构造有下列棵二叉树的集合 ,其中每棵二叉树中只有一个带权为的根结点,其 左右树均为空;步骤2 在中选取两棵根结点的权值最小的树作为左、右子树构造一棵新的二 叉树,且置新的二叉树的根结点的权

7、值为其左、右子树上根结点的权值之 和;步骤3 在中删除这两棵树,同时将新得到的二叉树加入中;步骤4 重复步骤2和步骤3,直到只含有一棵树为止,这棵树便是哈夫曼树.2.2 举例说明其构造过程假设叶结点权值集合为的哈夫曼树的构造第一步 我们根据给定的4个权值来构造4棵二叉树的集合.第二步 在找出权值中最小的两个作为新二叉树的左右子树,且置新的二叉树根结点权值是其左右结点权值之和.第三步 将次小的树与新生成的树再作为左右子树生成权值为6的新树;第四步 再次将权值为4的树在同上一个权值为6的树再次生成新树即可.从以上过程可以计算出这棵二叉树的带权路径长度为19.3 哈夫曼树的应用3.1 用于最佳判断过

8、程 在考查课记分时往往把百分制转换成优秀,良好 ,中等 ,及格,不及格五个等级.若不考虑学生考试分数的分布概率,程序判定过程很容易写成所示的方法.一般来讲学生考分大多分布在70至80分之间,从可看出这种情况的值要比较2至3次才能确定等级.而学生中考试不及格的人数很少,值比较一次即可定等级.能否使出现次数多的在70至80分之间的值比较次数减少,而使很少出现的低于60分的值比较次数多一些,以便提高程序的运行效率是一个问题.X6070=X80NY809070 中等不及格60 良好 及格 优秀 假设学生成绩对于不及格,及格,中等,良好和优秀的分布概率分别为5%,15%,40%, 30%,10%,以它们

9、做为叶子的权值来构造哈夫曼树,如图所示.此时带权路径长最短,其值210%.它可以使大部分的分数值经过较少的比较次数得到相应的等级.但是,事物往往不是绝对的,此时每个判断的框内条件都较为复杂,需比较两次,反而降低运行效率.所以我们采用折中作法,调整后得图判定树,更加切合实际.中等良好优秀及格3.2 用于通信编码在电报通讯中,电文是以二进制的序列传送的.在发送端需要将电文中的字符序列转换成二进制的序列,而在接收端又需要把接收的序列转换成对应的字符序列.例如给出一段电文: 电文中只使用了这四种字符,各字符出现的频度分别是,若进行等长编码,需要两位二进制位,可依次编码为 则所发电文是:采用不等长编码要

10、避免译码的二义性.例如,字符的编码是字符的编码的前缀部分.这样对于代码串,既是的代码,也是和的代码,因此,这样的编码不能保证译码的唯一性.所以,若对某一字符集进行不等长编码,可用该字符集中的每个字符作为叶子结点生成一棵编码二叉树,且约定左子树表示字符,右子树表示字符,则可以用从根结点到叶结点路径上的分支字符组成的字符串作为该叶子结点字符的编码.为了获得传送电文的最短长度,可将每个字符出现的频率作为字符结点的权值赋给该结点,从而求出此树的最小带权路径长度就等于求出了传送电文的最短长度.因此,求传送电文的最短长度问题就转化为求由字符集中所有字符作为叶子结点和由字符的出现频度作为其权值所产生的哈夫曼

11、树的问题.例如,各字符出现的概率为,对各概率取整,得到各字符的权值,利用它们构造哈夫曼树,如图所示,则各字符的编码为: 在构造了哈夫曼树之后,为求编码需从叶子结点出发走一条从叶子到根的路径,而为求译码需从根出发走一条根到叶子的路径.故哈夫曼编码成功地应用于离散数学与数据结构中的最优二叉树寻找.4 C+程序实现 #include#includeiomanip.h#define Max 32767 /*int 型最大可取值*/typedef struct Node int weight; /*定义权值*/ int parent,Lchild,Rchild; /*定义双亲结点,左、右孩子结点*/HTNode;typedef char *HuffmanCode; /*双重指针存储哈夫曼编码*/void select(int w,int n,int &xb1,int &xb2) /*xb指的是下标*/ int min1,min2; /*min1最小,min2次小*/ min1=w1;xb1=1; min2=w2;xb2=2; if(min1min2) min1=w2;xb1=2; min2=w1;xb2=1; /*安排第一和第二个数的显示顺序*/ for(int i=3;i2的数组元素*/ if(wimin1) min2=min1;xb2=xb1; /*第一次遍历,下标

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1