数据结构哈夫曼树与编码本解读.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构哈夫曼树与编码本解读

第六章 哈夫曼树及应用 本讲内容 1.哈夫曼树的定义 2.哈夫曼树的构建及算法实现 3.哈夫曼编码及算法实现 哈夫曼树的定义 带权路径长度最小的二叉树,称为“最优二叉树”,或哈夫曼树。 ? 如何计算树的带权路径长度? 树中所有叶子结点的带权路径长度之和。记作,WPL= ?wklk 。 ? 如何计算叶子结点的带权路径长度? 结点的权值乘以该结点的路径长度。 从根结点到该结点的路径上的分支数目。 路径长度 2 7 9 7 5 4 9 2 WPL(T)= 7?2+5?2+2?3+4?3+9?2 =60 WPL(T)= 7?4+9?4+5?3+4?2+2?1 =89 5 4 哈夫曼树的构建 如何构建哈夫曼树? 问题:根据给定的n个权值 {w1, w2, …, wn},构造一棵以这些权值为叶子的哈夫曼树。 哈夫曼算法思想 ①根据给定的n个权值{w1, w2, …, wn}构成n棵二叉树的集合F={T1, T2, …, Tn},其中每棵二叉树Ti只有权值为Wi的根结点,其左右子树为空。 ②在F中选取两棵根结点的权值最小的二叉树作为左右子树构造一棵新二叉树,新二叉树根结点的权值为其左右子树上根结点的权值之和。 ③在F中删除这两棵二叉树,同时将新得到的二叉树加入F中。 ④重复②和③ ,直到F中只剩一棵二叉树为止。 9 例如: 已知权值 W={ 5, 6, 2, 9, 7 } 5 6 2 7 5 2 7 6 9 7 6 7 13 9 5 2 7 6 7 13 9 5 2 7 9 5 2 7 16 6 7 13 29 0 0 0 0 1 1 1 1 00 01 10 110 111 哈夫曼编码 前缀编码 任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。 a: 110 b :00 c: 111 d: 10 e: 01 前缀编码 利用哈夫曼树可以构造一种不等长的二进制编码,并且构造所得的哈夫曼编码是一种最优前缀编码。从根到叶子的路径构成叶子的前缀编码。 哈夫曼编码 有八种字符:a b c d e f g h ,其在通信联络中出现的概率分别为:0.05 0.29 0.07 0.08 0.14 0.23 0.03 0.11 ,试设计哈夫曼遍码。 设权值 w = { 5 , 29 , 7 ,8 , 14 , 23 ,3 , 11} n = 8 构造过程: 5 29 7 8 14 23 3 11 5 3 8 29 7 8 14 23 11 7 8 15 29 23 11 14 11 19 29 14 23 14 29 29 23 23 42 29 58 100 0 0 0 0 0 0 0 1 1 1 1 1 1 1 a: 0000 b :11 c: 1000 d: 1001 e: 101 f :01 g: 0001 h:001 算法演示 例:字符及权值如下,A(6),B(7),C(1),D(5),E(2),F(8),构建哈夫曼树并计算哈夫曼编码,求WPL。 i c weight parent lchild rchild code 1 2 3 4 5 6 7 8 9 10 11 A B C D E F 6 7 1 5 2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 5 7 7 8 4 7 8 8 13 1 2 9 9 16 6 8 10 10 29 9 10 11 11 0 1 0 0 1 0 1 1 0 1 13 3 8 C E A B D 16 F 29 0 1 0 0 1 0 1 1 0 1 从根到叶子结点的路径上编码序列构成叶子结点的哈夫曼编码。 A: 00 B :01 C: 1110 D: 110 E: 1111 F:10 打印叶子结点的哈夫曼编码时,逆序(从根到叶子)打印哈夫曼树中每个结点的编码。 哈夫曼算法实现 n个字符c[1..n]权值分别为w[1..n] weight[1..2n-1]为各结点的权值 parent[1..2n-1]为各结点的双亲 lchild[1..2n-1]为

文档评论(0)

22ffbqq + 关注
内容提供者

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

1亿VIP精品文档

相关文档