哈夫曼树定义与原理
图上两棵二叉树可以简化为叶子结点带权的二叉树,A表示不及格、B表示及格、C表示
中等、D表示良好、E表示优秀。每个叶子的分支线上的数字就是成绩所占比例。
- 路径长度:树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称做路径长度。
- 树的路径长度:从树根到每一结点的路径长度之和。
- a树的路径长度:1+1+2+2+3+3+4+4 = 20
- b树的路径长度:1+2+3+3+2+1+2+2 = 16
- 结点的带权路径长度:该结点到树根之间的路径长度与结点上权的乘积。
- 树的带权路径长度:树中所有叶子结点的带权路径长度之和。用WPL表示
带权路径长度WPL最小的二叉树称做哈夫曼树,也叫最优二叉树。
- a树WPL:315
- b树WPL:220
- 上述结果意味着:10000个学生,a树需要31500次比较,b树只需要22000次比较,少了三分之一的量,性能明显提升。
如何构造哈夫曼树
上图虽然是哈夫曼树,但是每次判断需要比较两次。比如根结点(T < 80 && T >= 70 )效率上不如下图的高:
哈夫曼编码
如上,数据被压缩了,节约了大约17%的存储或传输成本。