- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 讨论:若采用“先转换,后遍历”方式,结果是否相同? 实例: A B C D E F G H J I 先序序列: 后序序列: A B C D E F G H I J B C D A F E H J I G A B C D E F G H J I 先序序列: 中序序列: A B C D E F G H I J B C D A F E H J I G 结论:森林转二叉树后的先序和中序遍历和森林的先序序列和后序序列的结果相同。 6.6二叉树的应用 平衡树—— 排序树—— 最优树—— 特点:左右子树深度差 ≤1 特点:“左小右大” 带权路径长度最短的树,又称 Huffman树,用途之一是通信中的压缩编码。 路 径: 路径长度: 叶子结点的权值: 树的带权路径长度: 记为: 由一结点到另一结点间的分支所构成。 路径上的分支数目。 基本术语: 设二叉树具有n个带权值的叶子结点,从根结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和。 WPL = ?wklk k=1 n 1、哈夫曼树(最优树)及哈夫曼编码(重点) 对叶子结点赋予的一个有意义的数值量。 第k个叶子的权值; 从根结点到第k个叶子的路径长度 结论:在结点数目相同的二叉树中,完全二叉树的路径长度最短。 (a) 哈夫曼树:带权路径长度最短的二叉树(又称最优二叉树)。 严格二叉树:只有度数为2和度为0结点的二叉树称为严格二叉树。 WPL=32 WPL=41 WPL= 30 Huffman树 例:给定4个叶子结点,其权值分别为{2,3,4,7},可以构造出形状不同的多个二叉树。 2 3 4 7 2 3 4 7 7 4 2 3 (b) (c) 哈夫曼树的特点: 1. 权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。 2. 只有度为0(叶子结点)和度为2(分支结点)的结点,不存在度为1的结点. 哈夫曼算法基本思想: ⑴ 初始化:由给定的n个权值{w1,w2,…,wn}构造n棵只有一个根结点的二叉树,从而得到一个二叉树集合F={T1,T2,…,Tn}; ⑵ 选取与合并:在F中选取根结点的权值最小的两棵二叉树分别作为左、右子树构造一棵新的二叉树,这棵新二叉树的根结点的权值为其左、右子树根结点的权值之和; ⑶ 删除与替换:在F中删除作为左、右子树的两棵二叉树,并将新建立的二叉树加入到F中; ⑷ 重复⑵、⑶两步,当集合F中只剩下一棵二叉树时,这棵二叉树便是哈夫曼树。 第1步:初始化 W={2,3,4,5} 哈夫曼树的构造过程 5 2 4 第2步:选取与合并 3 2 5 第3步:删除与替换 5 4 3 2 5 3 W={2,3,4,5} 哈夫曼树的构造过程 重复第2步 5 4 3 2 5 5 4 9 重复第3步 5 5 4 9 3 2 重复第2步 重复第3步 5 4 9 5 3 2 5 4 9 14 5 3 2 思考:设有4个字符d,i,a,n,出现的频度分别为7,5,2, 4,怎样编码才能使它们组成的报文在网络中传得最快? 方法1:等长编码。例如用二进制编码来实现。 取 d=00,i=01,a=10,n=11 怎样实现Huffman编码? 方法2:不等长编码,例如用哈夫曼编码来实现。 取 d=0; i=10, a=110, n=111 最快的编码是哪个? 是非等长的Huffman码! 先要构造Huffman树! 编码:将文件中的每个字符均转换为一个唯一的 二进制串。 其它术语 解码:是编码的逆过程,即将二进制位串转换为对应的字符。 前缀(编)码:为了保证解码的惟一性,因此在编码时要求字符集中任一字符的编码都不是其他字符编码的前缀,这种编码称为前缀(编)码。 最优前缀码:平均码长最小的前缀码称为最优前缀码。 哈夫曼编码:由哈夫曼树求得的编码是最优前缀码,称为哈夫曼编码。 特点:每一码都不是另一码的前缀,绝不会错译! 称为前缀码 注:左分支:0;右分支:1。 编码方法:按左0右1对Huffman树的所有分支编号! d a i n 1 1 1 0 0 0 Huffman编码结果:d=0, i=10, a=110, n=111 WPL=1×7+2×5+3×2+3×4)=35 ——将 Huffman树 与 Huffman编码 挂钩 练习:假设用于通信的电文仅由8个字母 {a,b,c,d,e,f,g,h }构成,它们在电文中出现的概率分别为{ 0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10},试为这8个字母设计哈夫曼编码。 解:先将概率
文档评论(0)