“Huffman 编码在整数可行长度中求精确的逐符号最优解;无噪声编码定理则对长块应用同一约束,把每符号整数舍入损失压到零。”
形式陈述 ​
标准二元 Huffman 算法的输入是有限字母表
- 为每个符号建立权重为
的叶; - 反复取当前权重最小的两个节点,以权重之和建立父节点;
- 直到只剩根,在每条左、右边分别标
0,1;根到叶路径就是码字。
得到的二叉树最小化
在所有二元逐符号前缀码中的值。由于任何唯一可译长度都满足 Kraft–McMillan 条件并可由同长度前缀码实现,它也给出逐符号唯一可译码的最小平均长度。
这个精确最优性结论的范围是:有限字母表、已知单符号概率、二元码字母表、无失真、逐符号、无长度上限。离散无记忆源使这个单符号目标直接等于长期逐符号平均,但算法本身不建模跨符号相关性。
直觉
深度每增加一,符号每次出现就多花一 bit,所以最小概率符号最适合占据最深叶。Huffman 算法先把两个最轻符号绑成同胞,相当于先决定它们共享最长前缀,再把这个合并节点当成一个概率为两者之和的新符号继续处理。
这是一个有证明义务的贪心算法:局部选择之所以安全,不是因为“概率小看起来该放深”,而是任何最优树都能通过交换改造成同意这个选择。
最优性的证明机制 ​
满二叉前缀树中,最深叶成对出现。把两个最小概率符号与一对最深同胞交换,只会把小权重移到不短的位置,因此平均长度不增;故存在一棵最优树让最小的两个概率
收缩这对同胞为权重
因为
例子与边界
可复算例: ​
合并轨迹为
一种输出是
码长
源熵为
并列权重可能产生不同码树,但平均长度同样最优。
超出精确范围的失败情形 ​
若源以相等概率产生块 00 或 11,单字母边缘是公平比特,逐符号 Huffman 仍需 0 或 1,即
单符号源、零概率符号、码长上限、不等码字符成本以及
推论与应用
Kraft–McMillan 不等式提供可行长度约束,Huffman 在其中解决有限分布的整数优化。对长源块再运行 Huffman 可以把每符号开销降到
实际压缩器常把 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.