赫夫曼树
又称哈夫曼树,最优二叉树,其本质就是一个带权值的树。
它们的带权路径长度分别为:
图a: WPL=5*2+7*2+2*2+13*2=54
图b: WPL=5*3+2*3+7*2+13*1=48
图b为赫夫曼树。
构建赫夫曼树:
步骤:
1,将所有左,右子树都为空的作为根节点。
2,在森林中选出两棵根节点的权值最小的树作为一棵新树的左,右子树,且置新树的附加根节点的权值为其左,右子树上根节点的权值之和。注意,左子树的权值应小于右子树的权值。
3,从森林中删除这两棵树,同时把新树加入到森林中。
4,重复2,3步骤,直到森林中只有一棵树为止,此树便是哈夫曼树。
图解:
a.初始森林:5 7 2 13,选取2 5
b.森林7 7 13,选取7 7
c.森林13 14,选取13 14
d.完成赫夫曼树
赫夫曼编码:
赫夫曼树在电文传输领域压缩电文的运用。
步骤:
1.将字母的频率设定为权值
2.将这些字母按照权值生成赫夫曼树
3.约定左分支表示字符‘0’,右分支表示字符‘1’,则可以用从根结点到叶子结点的路径上的分支字符串作为该叶子结点字符的编码。
这是种不等长编码,将频率高的字母用较短的二进制表示,频率低的则用较长二进制表示,以起到压缩长度的作用。不等长编码必须满足前缀码性质:
前缀码:对每一个字符规定一个0,1串作为其代码,并要求任一字符的代码都不是其他字符代码的前缀。这种编码称为前缀码。
而使用赫夫曼树生成的字母编码必定符合前缀码条件。