【数据结构】5min看懂哈夫曼树和哈夫曼编码

75 阅读1分钟

定义

二叉树有n个带权值的叶节点,那么从根节点到各个叶节点的路径长度与相应结点权值的乘积的和,叫做二叉树的带权路径长度WPL

image.png

构造

给定n个叶子结点,怎么构造哈夫曼树?

  1. 选择权值最小的两个结点作为新二叉树,根节点权值为两者之和
  2. 从当前根节点和未选择的根节点中选取权值最小的两个结点作为新二叉树
  3. 重复步骤2,直到没有所有叶节点都被使用

性质

  1. 权值越大的叶子结点越接近根节点
  2. 有n0个叶子节点的哈夫曼树,总共有2n0-1个结点
  3. 哈夫曼编码是左节点为0,右节点为1,哈夫曼编码不等长编码

image.png

应用

字符编码:

  • 权值大,使用频率大,所以编码长度短
  • 权值小,使用频率小,所以编码长度长一些
  • 在一组字符的哈夫曼编码中,不可能出现一个字符的哈夫曼编码是另一个字符哈夫曼编码的前缀。例如,有4个字符的编码为,001,100,0,1;这不是哈夫曼编码

前缀码

image.png