- 1、本文档共127页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 5. 现有如图5所示二叉树: 以先序、中序和后序遍历法访问该树的各结点的顺序分别是什么? 6.假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。试为这8个字母设计哈夫曼编码。使用0~7的二进制表示形式是另一种编码方案。对于上述实例,计算编码的平均长度比较两种方案。 A B E D G H C F K J I L 作 业 作业:1,3,4,5,6必选,选做:2。(选做,但建议做,不做为批改和作业要求与考核的内容。) 隔周,周二上课前交。 作业疑问或答疑:请联系卞凤杰老师,906559852@ * 森林的遍历 先序遍历(对森林中的每一棵树进行先根遍历) 若森林不空,则 访问森林中第一棵树的根结点; 先序遍历森林中第一棵树的子树森林; 先序遍历森林中(除第一棵树之外)其余树构成的森林。 中序遍历(对森林中的每一棵树进行中根遍历) 若森林不空,则 中序遍历森林中第一棵树的子树森林; 访问森林中第一棵树的根结点; 中序遍历森林中(除第一棵树之外)其余树构成的森林。 6.4 树和森林 * 森林的遍历 (1) 先序遍历森林 ABCDEFGHIKJ (2) 中序遍历森林 BCEDAGFKIJH 6.4 树和森林 森林的二叉树表示 * 一、最优树的定义 结点的路径长度:从根到叶子结点的路径长度之和。两个结点之间的路径长度是连接两结点的路径上的分支数。? 树的路径长度: li为从根到叶子结点的路径长度,m为叶子结点的个数。 树的带权路径长度: 6.6 哈夫曼树与哈夫曼编码 * 具有不同带权路径长度的二叉树 6.6 哈夫曼树与哈夫曼编码 * 在所有含n个叶子结点、并带相同权值的m个二叉树中,必存在一棵其带权路径长度取最小值的树,称为“最优树” 哈夫曼树 带权路径长度达到最小的二叉树即为哈夫曼树。 在哈夫曼树中,权值大的结点离根最近 6.6 哈夫曼树与哈夫曼编码 * 例如下面的程序: if(a 60) p = “bad”; else if(a 70) p = “pass”; else if(a 80) p = “general”; else if(a 90) p = “good”; else p = “excellent”; 6.6 哈夫曼树与哈夫曼编码 * 6.6 哈夫曼树与哈夫曼编码 * 6.6 哈夫曼树与哈夫曼编码 * 二、如何构造最优树 ? 哈夫曼最早研究出一个带有一般规律的算法: 以二叉树为例: (1) 根据给定的n个权值{w1, w2, …, wn},构造n棵二叉树的集合F = {T1, T2, …, Tn},其中每棵二叉树中均只含一个带权值为wi的根结点,其左、右子树为空树; 6.6 哈夫曼树与哈夫曼编码 * (2) 在F中选取其根结点的权值为最小的两棵二叉树,分别作为左、右子树构造一棵新的二叉树,并置这棵新的二叉树根结点的权值为其左、右子树根结点的权值之和; (3) 从F中删去这两棵树,同时加入刚生成的新树; (4) 重复(2)和(3)两步,直至F中只含一棵树为止。 6.6 哈夫曼树与哈夫曼编码 * 6.6 哈夫曼树与哈夫曼编码 注意:权值小的根节点放在二叉树的左侧。 * 6.6 哈夫曼树与哈夫曼编码 40 30 60 15 5 10 15 30 30 5 10 15 40 40 30 15 5 10 15 40 30 30 15 5 10 15 哈夫曼树中 权值小的结点离根远权值大的结点离根近 40 100 30 60 15 5 10 15 30 * 三、前缀编码 前缀编码:在一个字符集中,任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。 ? 哈夫曼编码:求最短的二进制编码实际上就是构造赫夫曼树的过程,由此得到的二进制编码,称赫夫曼编码。哈夫曼编码是一种最优(无)前缀编码。解码时不会混淆。 6.6 哈夫曼树与哈夫曼编码 * 我们可以利用二叉树来设计二进制的前缀编码。约定左分支表示字符‘0’,右分支便是字符‘1’,则可以用从根结点到叶子结点的路径上的分支字符串作为该叶子结点字符的编码。如此得到的编码是前缀编码。 证明: 假设某一个叶子x结点的编码是另一个叶子结点y编码的前缀,说明从根结点到叶子结点y中间需经过结点x,从而说明x有左或右子树,这与x是叶子结点矛盾。 6.6 哈夫曼树与哈夫曼编码 * 哈夫曼编码主要用途是实现数据压缩。 设给出一段报文: CAST CAST SAT AT A TASA 字符
文档评论(0)