也称最优二叉树。是带权路径长度最小的二叉树。
概念:
1、路径长度
路径: 从树中的一个节点到另一个节点之间的分支构成这两点之间的路径
路径长度:路径上的分支条数,树的路径长度是从树的根节点到每个节点的路径长度之和。
2、带权路径长度
节点的带权路径长度为从该节点到根节点之间的路径长度与节点上权的乘积。树的带权路径长度为树中所有叶子节点的带权路径长度之和。记为WPL。
如下图:
图a WPL = 2*(2+4+5+7) = 36
图b WPL = 2+42+3(5+7) = 46
图c WPL = 7+52+3(2+4) = 35
其中图c 的WPL最小,为哈夫曼树。节点权值越大,距离根节点就越近。
哈夫曼算法:
哈夫曼算法是构造权值集合为{w0,w1…wn}的哈夫曼树,其算法思路如下:
1、根据给定的n个权值{w0,w1…wn},构造具有n棵扩充二叉树的森林 F={T0,T1,…Tn},对于每棵扩充二叉树Ti只有一个带权值的Wi的根节点,左右子树都为空。
2、重复一下步骤,直到F中只剩下一棵树为止
(1)、在F中选取两棵根节点的权值最小的扩充二叉树,把这两棵树作为左右子树构造一颗新的二叉树,这个新的二叉树的根节点的权值为其左右两棵子树根节点的权值之和
(2)、在F中删除第一步中选取的两棵二叉树
(3)、将第一步中构造的新的二叉树加入到F中
最后得到的就是哈夫曼树。
例子:如给定的权值集合为{7,5,2,4},构造哈夫曼树的过程如下:
哈夫曼编码:
在通信领域,经过哈夫曼编码的信息小于大量冗余数据,提高传输效率,是重要的数据压缩方法。
一段信息由a,b,c,d,e 5个字符组成,各自出现的概率是0.12 0.4 0.15 0.08 0.25 ,把这几个字符串编码成二进制的01序列,有两种方法:一种是