哈夫曼树与哈夫曼编码、

哈夫曼树又称最优二叉树,是一类带权路径最短的树。

节点间的路径长度:节点到节点的分支数(即层数差)

树的路径长度:根节点到每个节点的路径长度总和

节点的带权路径长度:从根节点到这个节点的路径长度与该节点的权值的乘机

树的带权路径长度:所有节点带权路径长度的总和、

哈夫曼数即带权路径长度最小的数、

哈夫曼数的构造:

(1)根据给定的n个权值{w1,w2,...,wn}构造n棵二叉树的集合F={T1,T2,...,Tn},其中Ti中只有一个权值为wi的根结点,左右子树为空;
(2)在F中选取两棵根结点的权值为最小的数作为左、右子树以构造一棵新的二叉树,且置新的二叉树的根结点的权值为左、右子树上根结点的权值之和。
(3)将新的二叉树加入到F中,删除原两棵根结点权值最小的树;
(4)重复(2)和(3)直到F中只含一棵树为止,这棵树就是哈夫曼树。


哈夫曼编码

    从哈夫曼树根结点开始,对左子树分配代码“0”,右子树分配代码“1”,一直到达叶子结点为止,然后将从树根沿每条路径到达叶子结点的代码排列起来,便得到了哈夫曼编码。

例,对电文 EMCAD 编码。若等长编码,则

    EMCAD => 000001010011100 共15位

设各字母的使用频度为 {E,M,C,A,D}={1,2,3,3,4}。用频度为权值生成哈夫曼树,并在叶子上标注对应的字母,树枝分配代码“0”或“1”:

  

各字母的编码即为哈夫曼编码:  EMCAD => 000001011011 共12位


你可能感兴趣的:(c)