哈夫曼树,哈夫曼编码

一、哈夫曼树(最优二叉树)定义:

给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

首先搞清楚基本术语:

1、路径和路径长度

在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。

在哈夫曼树中,只需要关注根节点与叶子节点之间的路径即可。


哈夫曼树,哈夫曼编码

2、结点的权及带权路径长度

若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。

哈夫曼树,哈夫曼编码


3、树的带权路径长度

树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL(Weighted Path Length of Tree)。

WPL=14+6=20

二、构建哈夫曼树(考点,也是生成哈夫曼编码的基础)

给定这样的场景:给出5个节点,构建一颗带权路径长度最短的树。这里有一个原则:权值越大,则应该距离根节点越接近。这样可以减小WPL(树的带权路径长度)。

哈夫曼树,哈夫曼编码


注意:兄弟结点的位置跟权的大小没有关系!左右孩子谁大谁小都可以,上图中的权重2,3 的两个节点位置可以互换,根节点下两颗子树也能左右互换。


上一篇:让div等块级元素水平以及垂直居中的解决办法


下一篇:共享锁与排它锁