Skip to content

Huffman 编码

Huffman coding

反复合并最低概率符号构造期望码长最小前缀码的算法。

条目类型
算法

形式陈述

标准二元 Huffman 算法的输入是有限字母表 X 上已知的正概率 p1,,pm,输出是一个逐符号二元前缀码。当 m2 时,算法执行:

  1. 为每个符号建立权重为 pi 的叶;
  2. 反复取当前权重最小的两个节点,以权重之和建立父节点;
  3. 直到只剩根,在每条左、右边分别标 0,1;根到叶路径就是码字。

得到的二叉树最小化

L=i=1mpii

在所有二元逐符号前缀码中的值。由于任何唯一可译长度都满足 Kraft–McMillan 条件并可由同长度前缀码实现,它也给出逐符号唯一可译码的最小平均长度。

这个精确最优性结论的范围是:有限字母表、已知单符号概率、二元码字母表、无失真、逐符号、无长度上限。离散无记忆源使这个单符号目标直接等于长期逐符号平均,但算法本身不建模跨符号相关性。

直觉

深度每增加一,符号每次出现就多花一 bit,所以最小概率符号最适合占据最深叶。Huffman 算法先把两个最轻符号绑成同胞,相当于先决定它们共享最长前缀,再把这个合并节点当成一个概率为两者之和的新符号继续处理。

最小权重合并与码长

这是一个有证明义务的贪心算法:局部选择之所以安全,不是因为“概率小看起来该放深”,而是任何最优树都能通过交换改造成同意这个选择。

最优性的证明机制

满二叉前缀树中,最深叶成对出现。把两个最小概率符号与一对最深同胞交换,只会把小权重移到不短的位置,因此平均长度不增;故存在一棵最优树让最小的两个概率 pa,pb 成为最深同胞。

收缩这对同胞为权重 q=pa+pb 的叶。任意收缩树的平均长度 L 与展开后的长度满足

L=L+q,

因为 a,b 的码长各增加一。于是原问题的最优解等价于更小实例的最优解加固定成本 q;对符号数归纳即证明反复合并最小两项全局最优。

例子与边界

可复算例:(0.4,0.3,0.2,0.1)

合并轨迹为

0.1+0.2=0.3,0.3+0.3=0.6,0.4+0.6=1.

一种输出是

0.40,0.310,0.2110,0.1111.

码长 (1,2,3,3) 的 Kraft 和为 1,平均长度为

L=0.4(1)+0.3(2)+0.2(3)+0.1(3)=1.9 bit.

源熵为 H(X)1.8464 bit,所以冗余约为 0.0536 bit,并满足经典界

H(X)L<H(X)+1.

并列权重可能产生不同码树,但平均长度同样最优。

超出精确范围的失败情形

若源以相等概率产生块 0011,单字母边缘是公平比特,逐符号 Huffman 仍需 1 bit/符号;把两个符号作为一块编码只需 01,即 1/2 bit/符号。源的记忆并未让 Huffman 算法出错,而是让“只优化单符号码”成为错误模型。

单符号源、零概率符号、码长上限、不等码字符成本以及 D 元输出都需要额外约定或算法变体。基本 Huffman 定理也不包含码表传输成本、有限精度建模或运行时复杂度保证。

推论与应用

Kraft–McMillan 不等式提供可行长度约束,Huffman 在其中解决有限分布的整数优化。对长源块再运行 Huffman 可以把每符号开销降到 1/n 以下;无噪声编码定理把这一点概括为熵极限。

实际压缩器常把 Huffman 与上下文模型、游程变换或字典方法组合。此时 Huffman 只负责把模型给出的有限符号概率变成前缀码,整体性能还取决于模型是否捕捉相关性。

参考资料
  • David A. Huffman, “A Method for the Construction of Minimum-Redundancy Codes,” Proceedings of the IRE 40(9), 1952, pp. 1098–1101.
  • Thomas M. Cover and Joy A. Thomas, Elements of Information Theory, 2nd ed., Wiley, 2006, §5.8.
  • Robert G. Gallager, Information Theory and Reliable Communication, Wiley, 1968, §3.4.
关系图谱6 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系