树和二叉树4-哈夫曼树和回溯.ppt_第1页
树和二叉树4-哈夫曼树和回溯.ppt_第2页
树和二叉树4-哈夫曼树和回溯.ppt_第3页
树和二叉树4-哈夫曼树和回溯.ppt_第4页
树和二叉树4-哈夫曼树和回溯.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章树和二叉树,嘉应学院数学系,数据结构讲义,-哈夫曼树,1路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或子孙结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。,2结点的权及带权路径长度若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。,6.6哈夫曼树一、基本术语,3树的带权路径长度树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为wpl=,其中n为叶子结点数目,wi为第i个叶子结点的权值,li为第i个叶子结点的路径长度。,1哈夫曼树的定义在一棵二叉树中,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffmantree)。,二、构造哈夫曼树,例有4个结点,权值分别为7,5,2,4,构造有4个叶子结点的二叉树,WPL=7*2+5*2+2*2+4*2=36,WPL=7*3+5*3+2*1+4*2=46,WPL=7*1+5*2+2*3+4*3=35,2哈夫曼树的构造假设有n个权值,则构造出的哈夫曼树有n个叶子结点。n个权值分别设为w1,w2,wn,则哈夫曼树的构造规则为:,(1)将w1,w2,wn看成是有n棵树的森林(每棵树仅有一个结点);,(2)在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;(3)从森林中删除选取的两棵树,并将新树加入森林;(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为我们所求得的哈夫曼树。,下面给出哈夫曼树的构造过程,假设给定的叶子结点的权分别为1,5,7,3,则构造哈夫曼树过程如图7-24所示。,构造哈夫曼树的模拟演示,在远程通讯中,要将待传字符转换成由二进制组成的字符串:设要传送的字符为:ABACCDA若编码为:A00B01C10D-11,若将编码设计为长度不等的二进制编码,即让待传字符串中出现次数较多的字符采用尽可能短的编码,则转换的二进制字符串便可能减少。,00010010101100,三、哈夫曼树的应用(哈夫曼编码),设要传送的字符为:ABACCDA若编码为:A0B00C1D-01,关键:要设计长度不等的编码,则必须使任一字符的编码都不是另一个字符的编码的前缀。这种编码称作前缀编码。,ABACCDA,000011010,但:0000AAAAABABB,重码,设要传送的字符为:ABACCDA若编码为:A0B110C10D-111,0110010101110,A,C,B,D,0,0,0,1,1,1,采用二叉树设计二进制前缀编码,规定:左分支用“0”表示;右分支用“1”表示,译码过程:分解接收字符串:遇“0”向左,遇“1”向右;一旦到达叶子结点,则译出一个字符,反复由根出发,直到译码完成。,0110010101110,A,C,B,D,0,0,0,1,1,1,ABACCDA,求Huffman编码:由叶子根,若:(1)从左分支下去,则分支为“0”;(2)从右分支下去,则分支为“1”。,A,C,B,D,0,0,0,1,1,1,例:已知某系统在通讯时,只出现C,A,S,T,B五种字符,它们出现的频率依次为2,4,2,3,3,试设计Huffman编码。由Huffman树得Huffman编码为:TBACS000110110111,14,8,4,6,4,2,2,0,0,0,1,1,1,3,3,0,1,T,B,A,C,S,出现频率越大的字符,其Huffman编码越短。,.7回溯法与树的遍历,一、回溯法的基本思想回溯法:是对解空间树进行搜索的算法,从根结点开始,对树进行先序遍历,若遍历到某一结点时肯定不包含问题的解,则将该结点及其子树去掉,并从该结点向根的方向回溯到其上一结点,继续进行先序遍历。直到找到解或所有结点均遍历完。分治法:将规模为n的问题分解为k个规模较小的子问题,而这些子问题与原问题是同一问题,只是规模小了。,例-:求含n个元素的集合的幂集的幂集:由的所有子集构成的集合。如,2,则的幂集为:(A)=1,2,3,1,2,1,3,2,3,1,2,3,求的幂集的解空间树:可以用高度为的满足二叉树表示,其中由根到第一层结点的分支表示对第个元素的取舍,第一层到第二层的分支表示对第个元素的取舍,第二层到第三层的分支表示对第个元素的取舍,从根到叶子的路径构成一个解。,1,2,3,1,2,1,3,1,2,3,2,3,表示取,表示不取,到每个叶子的路径构成一个子集,所有路径的集合即为的幂集。,例:n=3时的0-1背包问题三件物品,重量分别为16,15,15,即w=16,15,15价值分别为45,25,25,即p=45,25,25,背包空间30,问:应如何装,才能使得所装物品总价值最大?穷举法:考虑所有情形,取其最大值,共有23=8种情形。贪心法:先取单位价值最大者,再取次大者。结果取重量为的物品。回溯法:先建立解空间树如下:,表示取,表示不取,每个分支代表一个物品第2层:w=16,p=45,第2,3层:w=15,p=25,A,B,D,H,I,J,K,L,M,N,O,G,C,F,E,用回溯法解题的三个步骤,针对所给问题,定义问题的解空间,确定易于搜索的解空间结构,以先序遍历(深度优先搜索)的方式搜索解空间,并在搜索过程中使用剪枝函数避免无效搜索。,使用递归方法实现回溯voidbacktrack(intt)if(tn)output(x);elsefor(inti=f(n,t);in时表示已搜索到叶子结点,for循环是对剩下的分支进行循环。,例6-4求皇后问题的所有合法布局解空间树(叉树)的构成:根结点为空棋盘(棋盘),根结点的个孩子为由在根结点上放置了第一个皇后后形成的棋盘,第三层则是在第二层的基础上放置了第二个皇后后形成的棋盘,共有4层,第4层共有44=256个叶子。约束函数为:任何两个棋子均不在同一行,不在同一列和不在同一斜线上,使用递归方法实现回溯voidTrial(inti,intn)if(in)输出棋盘的当前布局;elsefor(j=1;j=n);j+)在第i行第j列放置一个皇后if(当前布局合法)Trial(i+1,n);/if函数内的两个函数为约束函数和界限函数,1.熟练掌握二叉树的结构特性,了解相应的证明方法。2.熟悉二叉树的各种存储结构的特点及适用范围。3.遍历二叉树是二叉树各种操作的基础。实现二叉树遍历的具体算法与所采用的存储结构有关。掌握各种遍历策略的递归算法,灵活运用遍历算法实现二叉树的其它操作。层次遍历是按另一种搜索策略进行的遍历。,4.熟悉树的各种存储结构及其特点,掌握树和森林与二叉树的转换方法。建立存储结构是进行其它操作的前提,因此读者应掌握1至2种建立二叉树和树的存储结构的方法。5.学会编写实现树的各种操作的算法。6.了解最优树的特性,掌握建立最优树和哈夫曼编码的方法。,作业,1,假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论