一.引例
一般的学生成绩评定分为五个等级:优秀、良好、中等、及格、不及格,常见的代码描述如下:
可以把上面的代码流程画成下面的树状流程图
由于大部分学生成绩都是出于70到90之间,所以按照上面的流程大部分人都需要至少三次判断。因此我们可以对评价流程做出一点优化,如下所示:
通过先与80分做对比,使得大部分人(分数处于70-90之间)只需要两次判断。
如何能设计出这种效率最高的树结构?答案就是哈夫曼树。
二.哈夫曼树
首先理解几个概念
1. 权:树中结点相关的数值;
2. 森林:m棵互不相交的树的集合;
3. 路径长度:从树中某个结点到另一个结点之间的分支数目(经过的边数);
4. 带权路径长度:从树的根结点到任意结点的路径长度(经过的边数)与该结点上权值的乘积称为该结点的带权路径长度。
树中所有叶结点的带权路径长度之和称为该树的带权路径长度,称为WPL(Weighted Path Length),且