- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.Huffman树的引入 6.6 二叉树应用举例 Huffman树及其编码和译码 例 对学生的成绩s进行分类统计。 A:s = 90,出现的概率是10% B: 80 = s 90,出现的概率是40% C: 70 = s 80,出现的概率是30% D: 60 = s 70,出现的概率是15% E: s 60,出现的概率是5% 如何组织判断过程? 这里给出2种判断过程。 Y A 80=s90 s=90 B N Y N C Y N D Y N 70=s80 60=s70 E 哪一种好? Y B 70=s80 80=s90 C N Y N D Y N A Y N 60=s70 s=90 E 看哪一种的平均判断次数少? 1)平均判断次数:10% * 1 + 40% * 2 + 30% * 3 + 15% * 4 + 5% * 4 = 2.6 2)平均判断次数:40% * 1 + 30% * 2 + 15% * 3 + 10% * 4 + 5% * 4 = 2.05 第 2)种好。 是Huffman树! Huffman树的引入 1) 2) 概率: A:s = 90,10% B: 80 = s 90,40% C: 70 = s 80,30% D: 60 = s 70,15% E: s 60,5% 2.Huffman树及其构造算法 满足下列条件的二叉树为Huffman树 (设叶节点数为n):简称H树 Huffman树 最小 WPL(Weighted Path Length):加权路径长度 Lk: 从根节点到叶节点k的路径长度(经过的分支数) Wk: 叶节点k的权值(不同应用可表达不同含义) 如何构造一棵Huffman树 ? 即加权路径长度最小 思想: “权值”越大的叶节点离根越近。 方法:从“权值”最小的2个节点开始,依次将“权值”最小的2个子树合并为1个新树。 Huffman树的构造算法( Huffman算法) : Huffman树 设给定权值集合W={w1, w2, …, wn} (n≥1) ① 初始化:先构成n棵单节点的二叉树森林F={T1,T2, …, Tn},其中Ti(1≤i≤n)为只含有一个节点且带权值wi的二叉树,表示为: ? ② 从当前F中选两棵根节点权值最小的树,作为左、右子树,构成一棵新的二叉树,新树根的权值为左、右子树根的权值之和; ③ 从F中删除选出的两棵树,同时加入新树; ④ 重复②、③,直到F中只含一棵树为止。最后的那棵二叉树即为H树。 w1 w2 …… wn T1 T2 …… Tn Huffman算法属于贪心算法(greedy algorithm)。 例 6.27 设W={7,9,12,3,6},构造关于W的H树的过程: Huffman树 执行算法①步: 7 9 12 3 6 反复执行算法②、③: 7 9 12 3 6 9 7 9 12 3 6 9 16 12 7 9 3 6 16 9 21 7 9 12 3 6 9 16 21 37 Huffman树 注:WPL=H 树中各内部节点的权值之和。如图中的H树,其WPL=37+16+21+9=83。 说明: Huffman树不一定是完全二叉树。 Huffman树不唯一。因为当有多个最小的“权值”时,任选2个即可。另外,谁左谁右无规定。 Huffman树 3.Huffman编码及译码 问题:文件由若干字符组成。如何对字符进行编码,使得文件占用的空间少呢? Huffman树及其编码和译码 一种方法:使经常出现的字符编码尽量短,以压缩空间。 (1) Huffman编码:出现的频率越高,编码越短 ① 以待编码的所有字符作为叶节点,以出现频率作为权值,构造一棵Huffman树; ② 令所有的左分支取编码0,右分支取编码1,使每
文档评论(0)