David Huffman 赫夫曼
赫夫曼树定义与原理
以考试成绩为例。先将以上两棵二叉树简化为叶子带权的二叉树:
如图,A 表示不及格、B 表示及格、C 表示中等、D 表示良好、E 表示优秀。每个叶子的分支线上的数字就是刚才我们提到的五级分制的成绩所占比例数。(即各个分数段所占人数比例)
名词解释:
- 路径长度: 赫夫曼定义到,从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称作路径长度。 如 上图 a 中,根结点到结点 D 的路径长度就为 4 ,
- 树的路径长度:从树根到每个结点的路径长度之和。如果考虑到带权的话,结点的带权路径长度为从该结点到树根之间的路径长度与结点上权的乘积。树的带权路径长度为树中所有叶子结点的带权路径长度之和。
- 赫夫曼树:带权路径长度 WPL 最小的二叉树。
如何构造赫夫曼树?
- 先把有权值的叶子结点按照从小到大的顺序排列成一个有序序列,即 A5、E10、B15、D30、C40。
- 取头两个最小权值的结点作为一个新节点 N1 的两个子节点,注意相对较小的是左孩子。
- 将 N1 替换 A 与 E,插入有序序列中,保持从小到大排列,即 N115,B15,D30,C40。
- 重复步骤 2 。将 N1 与 B 作为一个新节点 N 2 的两个子节点。
- 重复上述步骤。结束。
现实总比理想要复杂的多,这样的赫夫曼树的总体性能不一定比上面的要好。