ch6-4 赫夫曼树.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 第6章 树和二叉树 (Tree Binary Tree) 6.1 树的基本概念 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.5 Huffman树及其应用 * 6.5 Huffman树及其应用 一、Huffman树 二、Huffman编码 最优二叉树 Huffman树 Huffman编码 带权路径长度最短的树 不等长编码 是通信中最经典的压缩编码 * 一、 Huffman树(最优二叉树) 路 径: 路径长度: 树的路径长度: 由一结点到另一结点间的分支所构成。 路径上的分支数目。 从树根到每一结点的路径长度之和。 若干术语: d e b a c f g h * 结点的带权路径长度: 树的带权路径长度: Huffman树: 结点到根的路径长度与结点上权的乘积 即树中所有叶子结点的带权路径长度之和( WPL) 树的带权路径长度最小的树(或最优二叉树) a b d c 7 5 2 4 (a) c d a b 2 4 5 7 (b) b d a c 7 5 2 4 (c) WPL= WPL= WPL= 36 46 35 Weighted Path Length 60 bad 0~59 70 pass 60~69 80 general 70~79 90 good 80~89 excellent 90~100 80 70 90 60 general 70~79 bad 0~59 pass 60~69 good 80~89 excellent 90~100 * 1. 构造Huffman树的基本思想: 权值大的结点用短路径,权值小的结点用长路径。 2. 构造Huffman树的步骤(即Huffman算法): (1) 由给定的 n 个权值{ w1, w2, …, wn }构成n棵二叉树的集合F = { T1, T2, …, Tn } (即森林) ,其中每棵二叉树 Ti 中只有一个带权为 wi 的根结点,其左右子树均空。 (2) 在F 中选取两棵根结点权值最小的树 做为左右子树构造一棵新的二叉树,且让新二叉树根结点的权值等于其左右子树的根结点权值之和。 * (3) 在F 中删去这两棵树,同时将新得到的二叉树加入 F中。 (4) 重复(2) 和(3) , 直到 F 只含一棵树为止。这棵树便是Huffman树。 例如: 已知权值 W={ 5, 6, 2, 9, 7 } 9 5 6 2 7 5 2 7 6 9 7 第一步: 第二步: * 6 7 13 9 5 2 7 9 5 2 7 16 6 7 13 29 第三步: Huffman树的特点:没有度为1的结点。 * 特点:任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。译码时可唯一复原。 利用赫夫曼树可以构造一种不等长的二进制编码,并且构造所得的赫夫曼编码是一种最优前缀编码,即使所传电文的总长度最短。 二、Huffman编码(前缀编码) 1、赫夫曼编码的基本思想: 出现概率大的信息用短码,概率小的用长码,最小冗余 2. Huffman编码的方法: 按左“0”右“1” 对Huffman树的所有分支编号 若ABCD四个字符的编码分别是0,00,1,01 则电文0000可以理解为AAAA,也可以理解为ABA(0 00 0) * 9 5 2 7 16 6 7 13 29 0 0 0 0 1 1 1 1 00 01 10 110 111 例如: 编码的顺序是从根节点数到叶子节点 * (1)由于Huffman树的WPL最小,说明编码所需要的比特数最少。 (4) Huffman编码的过程是从叶子走到根;而译码时又要从根走到叶子,因此每个结点需要增加双亲指针分量(连同结点权值共需要5个分量) 分析Huffman树和编码的特点: (2) Huffman树肯定没有度为1的结点; (3)一棵有n 0个叶子结点的Huffman树,共有2n0-1个结点;(因为n=n0+n1+n2=2n0-1) * 如何编程实现Huffman编码? 结点的结构: char weight parent lchild rchild 将整个Huffman树的结点存储在一维数组HT[1..n..m] (n为叶子结点的个数,且m=2*n-1); 各叶子结点的编码存储在另一“复合”数组HC[1..n]。 存储结构: Huffman树和Huffman编码的存储表示: typedef struct{ unsigned int weight;//权值分量(可放大取整) unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree;//存储Huffman树 typedef cha

文档评论(0)

有一二三 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档