1、第六章6Chapter six ,Part 6,引 入,赫夫曼树构造,赫夫曼树概念,赫夫曼树应用,引例:编程序统计各分数段的人数,如何做效率最高?,引 入,如何改进?,引 入,设有10000个数据要统计,需要比较的次数:一个数据分段平均比较次数*所统计的数据个数=(A的比例*A的比较次数+ B的比例*B的比较次数+ C的比例*C的比较次数+ D的比例*D的比较次数+ E的比例*E的比较次数)*所统计的数据个数=(0.1*4 +0.3*4 + 0.4*3+0.15*2+0.05*1)*10000=3.15*10000=31500,最优二叉树(赫夫曼树Huffuman ),基本概念 :路径:从树中
2、一个结点到另一个结点之间的分支构成这两个结点间的路径路径长度:路径上的分支数树的路径长度:从树根到每一个结点的路径长度之和树的带权路径长度:树中所有叶子节点的带权路径长度之和,赫夫曼树概念,WPL=7*2+5*2+2*2+4*2=36,WPL=7*3+5*3+2*1+4*2=46,WPL=7*1+5*2+2*3+4*3=35,例:有4个结点,权值分别为7,5,2,4,构造有4个叶子结点的二叉树,赫夫曼树概念,赫夫曼树的定义带权路径长度最短的树,赫夫曼树构造,例 w=5, 29, 7, 8, 14, 23, 3, 11,赫夫曼树构造,赫夫曼树应用,设有10000个数据要统计,需要比较的次数:一个
3、数据分段平均比较次数*所统计的数据个数=(A的比例*A的比较次数+ B的比例*B的比较次数+ C的比例*C的比较次数+ D的比例*D的比较次数+ E的比例*E的比较次数)*所统计的数据个数=(0.1*4 +0.3*4 + 0.4*3+0.15*2+0.05*1)*10000=3.15*10000=31500,(0.4*1+0.3*2+0.15*3+0.05*4+0.1*4)*10000=2.05*10000=20500,赫夫曼树应用,赫夫曼编码电文最短的二进制前缀编码,赫夫曼编码,编码思想,编码方法,译码方法,赫夫曼树应用,字符:N A N H U A,A N H U的编码分别为:00、01、
4、10、11,电文总长度为:12,二进制编码:通信中,可以采用0、1的不同排列来表示不同的字符,赫夫曼树应用,电文:010001101100,若采用不等长编码,让出现频率高的字符具有较短的编码,让出现频率低的字符具有较长的编码,这样有可能缩短传送电文的总长度。,字符:N A N H U A,无法译码!,赫夫曼树应用,A N H U的编码分别为:0、1、00、01,电文总长度为:8,电文:10100010,A N H U的编码分别为:0、10、110、111电文:10100010译码:N N A A N,赫夫曼树应用,前缀编码:任何一个字符的编码都不是另一个字符 编码的前缀,根据字符出现频率构造H
5、uffman树,然后将树中结点引向其左边的分支标“0”,引向其右边的分支标“1”;每个字符的编码即为从根到每个叶子的路径上得到的0、1序列 例: 要传输的字符集: D=C,A,S,T, ; 电文是 : CAS;CAT;SAT;AT; 字符出现频率:w=2,4,2,3,3 ,T : 00; : 01A : 10C : 110S : 111,赫夫曼树应用,从Huffman树根开始,从待译码电文中逐位取码。若编码是“0”,则向左走;若编码是“1”,则向右走,一旦到达叶子结点,则译出一个字符;再重新从根出发,直到电文结束。,例: 电文是 CAS;CAT;SAT;AT 其编码 “11010111011101000011111000011000” 电文为 “1101011101” 译文只能是“CAS;”,赫夫曼树应用,总 结,1、引入赫夫曼树2、赫夫曼树的基本概念3、赫夫曼树的构造4、赫夫曼树的应用,引 入,赫夫曼树构造,赫夫曼树概念,赫夫曼树应用,思考题,设通信用的电文由字符集a,b,c,d,e,f,g,h中的字母 构成,这8个字母在电文中出现的概率分别为 0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10 ,试为 这8个字母设计赫夫曼编码。,谢 谢 !,