哈夫曼树(Huffman Tree):最优二叉树与数据压缩应用
哈夫曼树(又称霍夫曼树)是一种带权路径长度最短的二叉树,也称为 “最优二叉树”。其核心思想是通过合理组织带权节点,使树的总带权路径长度最小,广泛应用于数据压缩(如哈夫曼编码)、信息检索等领域。
哈夫曼树的核心概念
关键术语
- 路径长度:两个节点之间的分支数量(如根节点到左子节点的路径长度为 1)。
- 树的路径长度:从根节点到所有节点的路径长度之和。
- 节点的带权路径长度:从该节点到根节点的路径长度 × 节点的权值(权值可表示频率、代价等)。
- 树的带权路径长度(WPL):所有叶子节点的带权路径长度之和(哈夫曼树的优化目标)。
哈夫曼树的定义
对于给定的n个带权叶子节点,构造一棵二叉树,若其树的带权路径长度(WPL)最小,则该二叉树称为哈夫曼树。
示例:
假设有 4 个叶子节点,权值分别为a(4)、b(3)、c(2)、d(1),其哈夫曼树的 WPL 计算如下:
- 叶子节点
a(权 4):路径长度 2 → 4×2=8 - 叶子节点
b(权 3):路径长度 2 → 3×2=6 - 叶子节点
c(权 2):路径长度 3 → 2×3=6 - 叶子节点
d(权 1):路径长度 3 → 1×3=3 - 总 WPL:8+6+6+3=23(为所有可能二叉树中最小)
哈夫曼树的构建算法
哈夫曼树的构建采用贪心策略,步骤如下: