离散数学教学课件 作者 郝晓燕 第8章图论.ppt

离散数学教学课件 作者 郝晓燕 第8章图论.ppt

  1. 1、本文档共116页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二元树的先根次序遍历算法: 访问根; 按先根次序遍历根的左子树; 按先根次序遍历根的右子树。 二元树的中根次序遍历算法: 按中根次序遍历根的左子树; 访问根; 按中根次序遍历根的右子树。 二元树的后根次序遍历算法: 按后根次序遍历根的左子树; 按后根次序遍历根的右子树; 访问根。 写出对图中二元树的3种遍历方法得到的结果。 a b e d g h k l m i c j f 分析 按遍历方法容易写出,只要先将该树分解为根、左子树、右子树三部分,然后再对子树作分解,直到叶为止。 解 先根遍历次序为abdghceijklmf; 中根遍历次序为gdhbaielkmjcf; 后根遍历次序为ghdbilmkjefca。 根树转化为二元树算法: 从根开始,保留每个父亲同其最左边儿子的连线,撤销与别的儿子的连线。 兄弟间用从左向右的有向边连接。 按如下方法确定二元树中结点的左儿子和右儿子:直接位于给定结点下面的结点,作为左儿子,对于同一水平线上与给定结点右邻的结点,作为右儿子,依此类推。 转化的要点:弟弟变右儿子 将下图转化为一棵二元树。 最优树与哈夫曼算法 在计算机及通讯事业中,常用二进制编码来表示符号,称之为码字(codeword)。例如,可用00、01、10、11分别表示字母A、B、C、D。如果字母A、B、C、D出现的频率是一样的,传输100个字母用200个二进制位。但实际上字母出现的频率很不一样,如A出现的频率为50%,B出现的频率为25%,C出现的频率为20%,D出现的频率为5%。能否用不等长的二进制序列表示字母A、B、C、D,使传输的信息的二进制位尽可能少呢?事实上,可用000表示字母D,用001表示字母C,01表示B,1表示A。这样表示,传输100个字母所用的二进制位为 3×5+3×20+2×25+1×50 = 175。 这种表示比用等长的二进制序列表示法好,节省了二进制位。但当我们用1表示A,用00表示B,用001表示C,用000表示D时,如果接收到的信息为001000,则无法辨别它是CD还是BAD。因而,不能用这种二进制序列表示A、B、C、D,要寻找另外的表示法。 设a1a2…an-1an为长度为n的符号串,称其子串a1,a1a2,…, a1a2…an-1分别为a1a2…an-1an的长度为1,2,…,n-1的前缀(Prefix)。 设A = {b1, b2, …, bm}是一个符号串集合,若对任意bi, bj∈A,bi≠bj,bi不是bj的前缀,bj也不是bi的前缀,则称A为前缀码(Prefixed Code)。若符号串bi(i = 1, 2…, m)中,只出现0和1两个符号,则称A为二元前缀码(Binary Prefixed Code)。 {1, 01, 001, 000}是前缀码 {1, 11, 001, 0011}不是前缀码。 用二元树产生二元前缀码 给定一棵二元树T,假设它有t片树叶。 设v是T任意一个分支点,则v至少有一个儿子至多有两个儿子。若v有两个儿子,则在由v引出的两条边上,左边的标上0,右边的标上1;若v只有一个儿子,在v引出的边上可标0也可标1。设vi为T的任意一片树叶,从树根到vi的通路上各边的标号组成的符号串放在vi处,t片树叶处的t个符号串组成的集合为一个二元前缀码。 若T存在带一个儿子的分支点,则由T产生的前缀码不唯一,但T若为完全二元树,则T产生的前缀码就是唯一的了。 例 图中所示的二元树产生的前缀码为:{1,00,010,011}。 因此用1表示A,用00表示B,用010表示 C,用011表示 即可满足要求。 0 1 0 0 1 1 1 00 010 011 当知道了传输的符号出现的频率时,如何选择前缀码,使传输的二进制位尽可能地少呢? 先产生最优二元树T,然后用T产生二元前缀码。 最优树 设有一棵二元树,若对其所有的t片叶赋以权值w1、w2、…、wt,则称之为赋权二元树(Power Binary Tree); 权为wi的叶的层数为L(wi),则称 为该赋权二元树的权;而在所有赋权w1、w2、…、wt的二元树中,W(T)最小的二元树称为最优树(Optimal Tree)。 1952年哈夫曼(Huffman)给出了求最优树的方法。 哈夫曼算法: 初始:令S = {W1, W2, …, Wt}; 从S中取出两个最小的权Wi和Wj,画结点vi,带权Wi,画结点vj,带权Wj。画vi和vj的父亲v,连接vi和v,vj和v,令v带权Wi+Wj; 令S = (S -{Wi, Wj})∪{Wi+Wj}; 判断S是否只含一个元素?若是,则停止,否则转2。 求带权7、8、9、12、16的最优树。 15 7 8 9 16 1

文档评论(0)

时间加速器 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档