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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

哈夫曼树及其若干应用.pdf

1、 本科毕业论文本科毕业论文 题 目 哈夫曼树及其若干应用 学生姓名 吴保利 专业名称 信息与计算科学 指导教师 李海侠 2015 年 5 月 21 日 教学单位 数学与信息科学学院 学生学号 201190024051 编 号 SX2015XX051 指导老师:李海侠 作者简介:吴保利(1990-),男,陕西咸阳人,信息与计算科学专业 2011 级 2 班 1 哈夫曼树及其若干应用哈夫曼树及其若干应用 吴保利(宝鸡文理学院 数学与信息科学学院,陕西 宝鸡 721013)摘摘 要:要:本文在哈夫曼树的构建及存储的基础上,着重介绍了哈夫曼树在通信和最佳判定方法中的应用,将哈夫曼树的思想与现实生活中的

2、许多问题紧密的联系在一起,体现了哈夫曼树的重要意义.关键词:关键词:哈夫曼树;哈夫曼编码;最佳判定;人力资源 哈夫曼(Huffman)树又称为最优树,是一类带权路径长度最短的二叉树,它是在 1952 年由 David A.Huffman 提出的,有着广泛的应用,其中最常见的是在哈夫曼编码(Huffman Coding)中的应用,这种编码方式发表于一种构建极小多余编码的算法一文中,之后多被应用于计算机数据处理和通信中.随着信息时代的发展,人们开始不断地利用哈夫曼树的思想来解决生活中的许多问题.例如文献1-11中许多国内外的学者都对哈夫曼树作了深入的研究.现实生活中的最佳判定问题、人才评估和选拔问

3、题、外部排序中最佳归并树的构建等问题中,都融入了哈夫曼树的思想,很大程度上提高了解决问题的效率.因此,在以后必然会有更多的领域涉及到哈夫曼树的思想,人们对哈夫曼树的探究也将更加深入.1 哈夫曼树哈夫曼树 1.1 哈夫曼树的定义哈夫曼树的定义 哈夫曼树也是一类特殊的二叉树,在介绍哈夫曼树的具体定义之前,先引出路径、路径长度和带权路径长度的定义.路径:树中的一个结点到另外一个结点之间的分支便构成这两个结点之间的路径.在这条路径上的分支数便是这条路径的长度,而一棵树的路径长度则是从每一个结点到根结点的路径长度的总和.路径长度:从树根第一层开始,若某一结点处于二叉树的第K层,因为从根结点到这个结点路径

4、上的分支条数是1K,所以从根结点到其他各个结点的路径长度()PL也就等于该结点所在的层数K减去 1.带权路径长度:在一棵树中,所有的叶子结点的带权路径长度之和称为该树的带权路径长度.通常记作1ni kkWPLl.其中i表示权值,kl表示路径长度.哈夫曼树:若有n个权值123n,并且把这些权值按照一定的规则来构造一棵共有n个叶子结点的二叉树,且每个叶子结点都有与其相对应的权值i,经过计算得到带权路径长度WPL最小的一棵二叉树便是哈夫曼树或最优二叉树.1.2 哈夫曼树的构造哈夫曼树的构造 给出哈夫曼树的定义之后,应该如何构造哈夫曼树呢?下面我们介绍一下哈夫曼最早给出的一个带有一般规律的算法,即哈夫

5、曼算法.给定n个权值集合123n,,且0i,构成n棵二叉树的集合123,nFT T TT,而且每一棵二叉树iT有且仅有一个带权为i的根结点,其 2 左、右孩子都为空.重复执行以下步骤直到中只含有一棵树为止:在集合F中分别选取两棵权值最小的二叉树,把这两棵二叉树分别作为左子树和右子树之和.在集合F中删除中的两棵权值最小的二叉树,且把新二叉树的权值加到集合中.最后得到的便就是哈夫曼树了.2 哈夫曼树的应用哈夫曼树的应用 哈夫曼树在通信、工程及软件开发等问题中都有着广泛的应用,而哈夫曼编码是哈夫曼树最为常见的应用.本文将着重介绍哈夫曼编码在通信中的应用,哈夫曼树在建立最佳判定算法、人力资源工作中以及

6、最佳归并树中的应用.2.1 哈夫曼编码哈夫曼编码 2.1.1 哈夫曼编码的简介哈夫曼编码的简介 哈夫曼二叉树在通讯编码中具有极大的实际应用意义,比如构造一组最优前缀码,将文字转化为二进制字符串.二进制编码通常有两种:一种是等长编码,另一种编码是不等长编码,等长编码的二进制串长度是由电文中不同的字符个数来决定的.如果需要传送的字符只有 4 种时,则只要有两位字符的串便可以进行分辨.但是,当传送的字符有 26 种时,则等长编码的长度至少为 5.不等长编码中每个字符的编码长度可能是不相等的.不等长编码最大的优点即尽可能地缩短传送电文的字符串的总长度.而每个字符在电文中所出现的次数通常情况下都是不同的

7、.如果将出现频数高的字符尽可能的缩短其编码长度,则总长也随之减少.不过在不等长编码的实用过程中,其中每一个字符的编码都不允许是另一个字符编码的前缀,我们将这种编码称为前缀编码.那么电文总长最短的二进制前缀码应该如何获取呢?假如每个字符在电文中所出现的次数是i,该字符对应的编码长度为il,电文中一共有n种字符,则电文的总长度为1ni iil.对应到二叉树上,如果置i为叶子结点的权,il为从根到叶子的路径长度.那么1ni iil刚好是从根结点到叶子结点的路径长度,由此可见,如果将n种字符所出现的频率视为权值,可以得到电文总长度最短的二进制前缀码,设计一棵哈夫曼树时得到的二进制前缀码便称为哈夫曼编码

8、.2.1.2 哈夫曼树和哈夫曼编码的存储表示哈夫曼树和哈夫曼编码的存储表示 一棵有n个叶子结点的哈夫曼树由于没有度为 1 的结点,所以在设计出的哈夫曼树中共有21n个结点,存储在长度为21n的一维数组中.应该如何选定结点结构?由于在构成哈夫曼树之后,为了求编码,在求编码时,先根据权值构建出哈夫曼树,然后从叶子结点开始出发走一条从叶子结点到根结点的路径,而译码则需要从根结点开始出发走一条从根结点到叶子结点的路径.仅仅对结点来说,孩子节点与双亲结点的信息都需要体现出来,存储结构如下:typedef struct unsigned int weight;unsigned int parent,lch

9、ild,rchild;HTNode,*HuffmanTree;3 Typedef char*HuffmanCode;2.1.3 哈夫曼编码在通信中的应用哈夫曼编码在通信中的应用 在通信中我们通常希望用最少的信息量来表达所要描述的问题,一般都将需传送的文字转换成由二进制的字符组成的字符串.而在传送过程中我们又希望所需要的字符串更短且能正确表达,所以我们一般选择用哈夫曼编码进行传送.例例 1 已知共有 8 种字符在某系统在通信系统中出现,其中每个字符的出现概率分别为:0.05,0.29,0.06,0.09,0.13,0.24,0.03,0.11,试设计哈夫曼编码.解:解:其步骤可分为:假设权值(5

10、,29,6,9,13,24,3,11)W,8n,则15m,按照上述算法可以构造一棵二叉树如图所示.其存储结构 HT 的初始状态如表 1 所示.初始化为m个结点,对前n个结点赋权值.由构造最优二叉树的算法策略,建立前n个结点与其双亲结点的对应关系.其哈夫曼编码 HC 实现结果如图 2 所示.由建立的数据结构,从叶子结点向上遍历,并记录每个字符对应的编码串,将其存放在 HT 中.图图 1 1 建立哈夫曼树建立哈夫曼树 3 5 6 13 11 24 29 9 4 表表 2 HT2 HT 的最终状态的最终状态 weight parent lchild rchild 1 5 9 0 0 2 29 14

11、0 0 3 6 10 0 0 4 9 11 0 0 5 13 12 0 0 6 24 13 0 0 7 3 9 0 0 8 11 11 0 0 9 8 10 1 0 10 14 12 5 9 11 20 13 4 8 12 27 14 5 10 13 44 15 11 6 14 56 15 2 12 15 100 0 13 14 1 1 1 1 1 0 2 1 0 3 1 1 1 0 4 0 0 0 5 1 1 0 6 0 1 7 1 1 1 1 1 8 0 0 1 表表 1 HT1 HT 的初始状态的初始状态 weight parent lchild rchild 1 5 0 0 0 2 2

12、9 0 0 0 3 6 0 0 0 4 9 0 0 0 5 13 0 0 0 6 24 0 0 0 7 3 0 0 0 8 11 0 0 0 9-0 0 0 10-0 0 0 11-0 0 0 12-0 0 0 13-0 0 0 14-0 0 0 15-0 0 0 图图 2 2 各字符的哈夫曼编码各字符的哈夫曼编码 HC 5 通过上述步骤之后得到的 8 种字符的编码(图 2),便使得每一种字符在传送的过程中能够高效率的完成,这就给发报人员及译码人员带来很大的方便.2.2 哈夫曼树在建立最佳判定算法中的应用哈夫曼树在建立最佳判定算法中的应用 处理判定问题时,经常会出现满足中间条件较多而满足两头条

13、件较少的情况,就像我们在统计学生的成绩时,优秀生和不及格的学生人数都与中等学生的人数差距较大.如果我们在类似的判定算法中充分的利用哈夫曼树的思想,那么程序的执行速度将会被大大提高.其基本思想也是利用哈夫曼算法将各个等级的占有比例数作为权值,建立哈夫曼树,便可得到最佳判定顺序,提高判定效率.例例 22 在某学院职工合算奖金的系统中,根据学院奖金发放的有关规定,行政人员按其级别进行发放,其级别包含:局级、处级、副处级、科级、副科级、一级科员、二级科员、三级科员;教师也按其级别进行发放,教师的级别有:初级、中级和高级.而且每个等级内又可分为 A、B、C 三个级别.该学院目前行政人员的分布如表 3 所

14、示,试建立合适的判定算法,分别确定出每个行政人员的职务和各个教师的级别.表表 3 3 某学院目前行政人员的分布表某学院目前行政人员的分布表 级别 局级 处级 副处级 科级 副科级 一级科员 二级科员 三级科员 比例数 0.01 0.02 0.1 0.13 0.09 0.15 0.4 0.1 解:解:按照普通的方法确定行政人员职务的算法如下:if(grade=“jj”)else if(grade=“cj”)else if(grade=“fcj”)else if(grade=“kj”)else if(grade=“fkj”)else if(grade=“1ky”)else if(grade=“2k

15、y”)else if(grade=“3ky”)由上题中给出的分布规律可计算得平均每人要判断 5.7 次,在 70%以上的人要判断 4 次以上才能得到最终结果.如果利用哈夫曼树确定判定算法的话,我们可以以各级别所占的比例数 1、2、10、13、9、15、40、10 为权,从而构造一棵有 8 个叶子结点的哈夫曼树,如图 3 所示.按照哈夫曼树结构确定判定顺序如下:if(grade=“2ky”)else if(grade=“1ky”)else if(grade=“kj”)else if(grade=“fcj”)else if(grade=“3ky”)else if(grade=“fkj”)else

16、if(grade=“cj”)else if(grade=“jj”)按照上述算法平均每人只需判断 2.75 次,也只有 22%的人需要判断 4 次以上.这与常规的顺序相比减少判定次数在 50%以上,如果按照 1 000 人计算,仅这一项减少判断次数将近 3 000 次.同样,若每个级别的 A、B、C 三等的分布分别是 10%、8%和 5%,则常规的判定顺序为:6 if(grade=A)else if(grade=B)else if(grade=C)如果按照这类判定顺序,那么将有 95%的人需要判定 2 次.若按照下列哈夫曼树的判定顺序:if(grade=B)else if(grade=A)else if(grade=C)则大约有 85%以上的人在判定时只需要 1 次.通过上述两种方法的比对,我们能够清楚的看出,在类似的判定问题中,如果能够充分的利用好哈夫曼树的思想,将会在很大程度上提高问题的解决效率.2.3 哈夫曼树在人力资源工作中的应用哈夫曼树在人力资源工作中的应用 在日常处理人力资源相关的工作中,尤其是在进行人才的选拔时,经常会出现这样的需求:从众多的候选者之中尽快的选拔中最能符合需

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

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