第6章 树和二叉树.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.6.2 赫夫曼编码 电报需将传送的文字转换成由二进制的字符组成的字符串,如‘ABACCDA’设A、B、C、D编码分别为00、01、10、11则‘00010010101100’14位,对方接收时将其译码。在传送电文时,希望总长度尽可能的短,如A、B、C、D分别编码为0、00、1和01,则上述7个字符转换成总长为9位‘000011010’,但是这样的电文无法译码。‘0000’可有多种译法‘AAAA’或‘ABA’、‘BB’,设计时用前缀编码。 前缀编码:任一个字符的编码都不是另一个字符编码的前缀,可利用二叉树设计前缀编码。 设计电文总长最短的前缀编码,设每种字符在电文中出现的次数为wi编码长度为Li,有n种字符,电文总长ΣwiLi ( i=1…n) 对应二叉树上,若置wi为叶子结点的权,恰为WPL,即设计赫夫曼树,得到的前缀编码为赫夫曼编码,赫夫曼树中没有度为1的结点(严格的(正则的)二叉树),一棵有n个叶子结点的赫夫曼树共有2n-1个结点,可以存储在2n-1的一维数组中,另外需知道双亲。 表 6 – 1 指令的使用频率 指令 使用频率(Pi) I1 0.40 I2 0.30 I3 0.15 I4 0.05 I5 0.04 I6 0.03 I7 0.03 表 6 – 2 指令的变长编码 指令 使用频率(Pi) I1 0 I2 1 I3 00 I4 01 I5 000 I6 001 I7 010 图6.30 构造赫夫曼树示例 表 6 – 3 指令的赫夫曼编码 指令 使用频率(Pi) I1 0 I2 10 I3 110 I4 11100 I5 11101 I6 11110 I7 11111 可以验证,该编码是前缀编码。若一段程序有1000条指令, 其中I1大约有400条,I2大约有300条,I3大约有150条,I4大约有50条,I5大约有40条,I6大约有30条,I7大约有30条。对于定长编码,该段程序的总位数大约为3×1000=3000。采用赫夫曼编码后,该段程序的总位数大约为1×400+2×300+3×150+5×(50+40+30+30)=2200。可见,赫夫曼编码中虽然大部分编码的长度大于定长编码的长度3,却使得程序的总位数变小了。可以算出该赫夫曼编码的平均码长为: 举例:数据传送中的二进制编码。 要传送数据 state、seat、act、tea、cat、set、a、eat,如何使传送的长度最短? 首先规定二叉树的构造为左走0、右走1,如图6.31所示。 为了保证长度最短,先看字符出现的次数,然后将出现次数当作权,如图6.32所示。 图6.31 左走0、右走1的二叉树 图6.32 对字符按权排序 字符 s t a e c 字符出现的次数 3 8 7 5 2 图6.33 构造赫夫曼树的过程 按规定:0左1右, 则有 000 001 01 10 11 2 3 5 7 8 c s e a t 所以state的编码为00111101101,stat的编码为001111011。 构造满足赫夫曼编码的最短最优性质: (1) 若di≠dj(字母不同),则对应的树叶不同。因此前缀码(任一字符的编码都不是另一个字符编码)不同,一个路径不可能是其它路径的一部分,所以字母之间可以完全区别。  (2) 将所有字符变成二进制的赫夫曼编码,使带权路径长度最短,相当总的通路长度最短。  若要求传送以上这些编码长度不一的数据,且还要求传送词间互相区分,应如何设计最优编码呢?为保证传送词间互相区别,则需加入一空白字符出现频率,空白字符^出现为7,再构造赫夫曼树,由此得到的赫夫曼编码一定满足最短且又互相区分的性质。 c s e a ^ t 2 3 5 7 7 8 6.6.3 赫夫曼编码算法的实现 由于赫夫曼树中没有度为1的结点,则一棵有n个叶子的赫夫曼树共有2×n-1个结点,可以用一个大小为2×n-1 的一维数组存放赫夫曼树的各个结点。由于每个结点同时还包含其双亲信息和孩子结点的信息,所以构成一个静态三叉链

文档评论(0)

3344483cc + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档