树与二叉树.ppt

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

赫夫曼编码 字符 A B C D E D 文件编 码长度 频度 45 13 12 16 9 5 定长编码 000 001 010 011 100 101 300 变长编码 0 101 100 111 1101 1100 224 编码方式对文件存储空间的影响 赫夫曼编码 变长编码可能存在的问题---二义性 E、T、W分别编码为00、01、0001 无法判断二进制串0001是ET还是W 前缀码 为了避免二义性,对字符集进行编码时,要求字符集中任一字符的编码都不是其他字符编码的前缀 赫夫曼编码 最优前缀码 设文件字符集C={c1,c2,c3,…,cn},共n个字符 设字符ci在文件中出现的频度为fi,编码长为li,则希望文件总长最短 A B C D 1 1 1 0 0 0 编码 A(0) B(10) C(110) D(111) 问:编码 {00,01,10,11}, {0,1,00,11}, {0,10,110,111},哪一组不是前缀码? 前缀编码示例 赫夫曼树的特点: 没有度为1 的结点,称为严格的二叉树 赫夫曼树与赫夫曼编码的存储表示 Typedef struct{ unsigned int weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree;//动态分配数组存储赫夫曼树 Typedef char *HuffmanCode;//动态分配赫夫曼编码表 7 0 0 0 5 0 0 0 2 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 a b c d 7 5 2 4 c d 2 4 a b 7 5 6 c d 2 4 b 5 11 a 7 a b c d 7 5 2 4 18 7 0 0 0 5 0 0 0 2 5 0 0 4 5 0 0 6 0 3 4 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 7 0 0 0 5 6 0 0 2 5 0 0 4 5 0 0 6 6 3 4 11 0 2 5 0 0 0 0 1 2 3 4 5 6 7 7 7 0 0 5 6 0 0 2 5 0 0 4 5 0 0 6 6 3 4 11 7 2 5 18 0 1 6 1 2 3 4 5 6 7 赫夫曼树的构造过程 w p l r w p l r w p l r w p l r 思想:根据字符出现频率编码,使电文总长最短。 编码:根据字符出现频率构造Huffman树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子的路径上得到的0、1序列 例 要传输的字符集 D={C,A,S,T, ; } 字符出现频率 w={2,4,2,3,3} C S 3 3 6 4 2 2 4 8 14 T ; A 0 0 1 1 0 1 1 0 T : 00 ; : 01 A : 10 C : 110 S : 111 赫夫曼编码 从Huffman树根开始,从待译码电文中逐位取码。 若编码是“0”,则向左走; 若编码是“1”,则向右走,一旦到达叶子结点,则译出一个字符;再重新从根出发,直到电文结束 例 电文是{CAS;CAT;SAT;AT} 其编码 “11010111011101000011111000011000” 电文为“1101000” C S 3 3 6 4 2 2 4 8 14 T ; A 0 0 1 1 0 1 1 0 T : 00 ; : 01 A : 10 C : 110 S : 111 译码: 译文只能是“CAT” 赫夫曼树 (Huffman Tree) 例2:已知某系统在通信联络中只可能出现8种字符,其概率分布为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计赫夫曼编码。 首先设8个字符的权分别为w={5, 29, 7, 8, 14, 23, 3, 11} n=8,则m=15,即在有8个叶子结点的赫夫曼树上有15个结点 然后构造一棵赫夫曼树: 29 14 7 8 1 1 1 0 0 0 23 11 5 3 1 1 1 0 0 0 最后就得到8个叶子结点的赫夫曼编码: 0110(5) 10(29) 1110(7) 1111(8) 110(14) 00(23) 0111(3) 010(11) 给定权值7、18、3、32、5、26、12、8,构造相应的赫夫曼树和编码,并计算带权路径长度

文档评论(0)

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

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

1亿VIP精品文档

相关文档