- 1、本文档共116页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]遍历非递归算法
* 注意: ①初始森林中的n棵二叉树,每棵树有一个孤立的结点,它们既是根,又是叶子。②n个叶子的哈夫曼树要经过n-1次合并,产生n-1个新结点。最终求得的哈夫曼树中共有2n-1个结点,结点的度要么为0,要么为2。 n0+n1+n2=n n0=n2+1 n1=0 2n0-1=n * ③哈夫曼树是严格的(strict,或正则的)二叉树,没有度数为1的分支结点。 * ——赫夫曼树的应用 〇在解决某些判定问题时,利用赫夫曼树可以得到最佳判定算法(p145图6.23) 〇用于通讯和数据传送时的赫夫曼编码 6.6.2哈夫曼编码 目前,进行远距离快速通讯的主要手段是电报,即将需传送的文字转换成由二进制的字符组成的字符串,我们称之为编码。 给定的字符集C,可能存在多种编码方案。 * (1)等长编码方案 等长编码方案将给定字符集C中每个字符(m个)的码长L定为:[log2|c|],|C|表示字符集的大小。2L=m 【例】设待压缩的数据文件共有100个字符,这些字符均取自字符集C={a,b,c,d,e,f,g,h},等长编码需要三位二进制数字来表示六个字符,因此,整个文件的编码长度为300位。 * C ={a,b,c,d,e,f,g,h} 则字符串efgbacd可译为 100101110001000010011 对方接受时,可按三位一分进行译码,即 e f g b a c d 100,101,110,001,000,010,011 a 000 b 001 c 010 d 011 e 100 f 101 g 110 h 111 * 当然,在进行电文传送时,希望电文总长尽可能短,即传送时间尽可能短。如果对每个字符设计长度不等的编码,且让电文中出现次数较多的字符采用尽可能短的编码,则传送长度便可减少。 (2)变长编码方案 变长编码方案将频度高的字符编码设置短,将频度低的字符编码设置较长。【例】设待压缩的数据文件共有100个字符,这些字符均取自字符集C={a,b,c,d,e,f},其中每个字符在文件中出现的次数(简称频度)如下: * --------------------------------------------------------------------字符????????????????????a???? b???? c???? d????? e????? f频度 ?????45??? 13??? 12??? 16???? 9????? 5定长编码????????????000??001??010?? 011???100??? 101变长编码??????????????0??? 101?? 100?? 111 ?1101?? 1100-------------------------------------------------------------------- 1X45+3X13+3X12+3X16+4X9+4X5=224 * 注意: 变长编码可能使解码(译码)产生二义性。产生该问题的原因是某些字符的编码可能与其他字符的编码开始部分(称为前缀)相同。【例】设E、T、W分别编码为01、00、0001,则解码时无法确定信息串0001是ET还是W。 * (3)前缀码方案 对字符集进行编码时,要求字符集中任一字符的编码都不是其它字符的编码的前缀,这种编码称为前缀(编)码。 利用哈夫曼树很容易求出给定字符集及其概率(或频度)分布的最优前缀码。 具体做法: (1)用字符ci作为叶子,pi做为叶子ci的权,构造一棵哈夫曼树,并将树中左分支和右分支分别标记为0和1;(2)将从根到叶子的路径上的标号依次相连,作为该叶子所表示字符的编码。该编码即为最优前缀码(也称哈夫曼编码)。 * 假设有一个电文字符集中有8个字符{a,b,c,d,e,f,g,h},每个字符的使用频率分别为{0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11},现以此为例设计哈夫曼编码。哈夫曼编码设计过程为:(1)为方便计算,将所有字符的频度乘以100,使其转换成整型数值集合,得到{5,29,7,8,14,23,3,11};(2)以此集合中的数值作为叶子结点的权值构造一棵哈夫曼树,如图所示;(3)由此哈夫曼树生成哈夫曼编码,如图所示。 * 字符 字符的使用频率 编码 a b c d e f g h 0.05 0.29 0.07 0.08 0.14 0.23 0.03 0.11 0111 10 1110 1111 110 00 0110 010
文档评论(0)