A、b,a,d,f,e,cB、b,d,f,e,c,aC、b,f,e,d,c,aD、f,e,d,c,b,a考点15:哈夫曼树(★★★)
1、最优二叉树(Huffman树)
①结点路径:从树中一个结点到另一个结点的之间的分支构成这两个结点之间的路径。
②路径长度:结点路径上的分支数目称为路径长度。
③结点的带权路径长度:从该结点的到树的根结点之间的路径长度与结点的权(值)的乘积
④权(值):各种开销、代价、频度等的抽象称呼。
⑤树的路径长度:从树根到每一个结点的路径长度之和。
2、Huffman树的构造
①根据n个权值{w1,w2,�6�8,wn},构造成n棵二叉树的集合F={T1,T2,�6�8,Tn},其中每棵二
叉树只有一个权值为wi的根结点,没有左、右子树;
②在F中选取两棵根结点权值最小的树作为左、右子树构造一棵新的二叉树,且新的二
叉树根结点权值为其左、右子树根结点的权值之和;
③在F中删除这两棵树,同时将新得到的树加入F中;
④重复②、③,直到F只含一颗树为止。
构造Huffman树时,为了规范,规定F={T1,T2,�6�8,Tn}中权值小的二叉树作为新构造的二叉树
的左子树,权值大的二叉树作为新构造的二叉树的右子树;在取值相等时,深度小的二叉树
作为新构造的二叉树的左子树,深度大的二叉树作为新构造的二叉树的右子树。
图是权值集合W={8,3,4,6,5,5}构造Huffman树的过程。所构造的Huffman树的WPL
是:WPL=6×2+3×3+4×3+8×2+5×3+5×3=79。
3、Huffman编码方法
由于每个字符都是叶子结点,不可能出现在根结点到其它字符结点的路径上,所以一个
字符的Huffman编码不可能是另一个字符的Huffman编码的前缀。
若字符集C={a,b,c,d,e,f}所对应的权值集合为W={8,3,4,6,5,5},如图所示,则字符
a,b,c,d,e,f所对应的Huffman编码分别是:10,010,011,00,110,111。
以字符集C作为叶子结点,次数或频度集W作为结点的权值来构造Huffman树。规定
Huffman树中左分支代表“0”,右分支代表“1”。
从根结点到每个叶子结点所经历的路径分支上的“0”或“1”所组成的字符串,为该结
点所对应的编码,称之为Huffman编码。
(https://www.dingdian555.cc/html/3316/3316863/11110827.html)
www.dingdian555.cc。m.dingdian555.cc