Skip to content

算法Algorithm

Huffman 编码

Huffman coding

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

形式陈述 ​

标准二元 Huffman 算法的输入是至少含两个符号的有限字母表 X 上已知的正概率分布 p1,…,pm,输出是一个逐符号二元前缀码。当 m≥2 时,算法执行:

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

得到的二叉树最小化

L=∑i=1mpiℓi

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

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

直觉

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

最小权重合并与码长

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

最优性的证明机制 ​

正概率最优树不需要只含一个孩子的内部节点:收缩该边会缩短其全部后代的码字并严格降低平均长度。因此可取满二叉前缀树,其中最深叶成对出现。把两个最小概率符号与一对最深同胞交换,只会把小权重移到不短的位置,因此平均长度不增;故存在一棵最优树让最小的两个概率 pa,pb 成为最深同胞。

归纳从 m=2 开始:两个正码长都至少为一,取 0,1 即得最小平均长度 1。仅在 m≥3 时,才把上述同胞收缩为权重 q=pa+pb 的叶;这时剩下的 m−1≥2 个符号仍属于同一合法问题类。任意收缩树的平均长度 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.4↦0,0.3↦10,0.2↦110,0.1↦111.

码长 (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.

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

超出精确范围的失败情形 ​

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

单符号源须先声明消息数:外部已约定一个块时可用空码字;若须从无分隔符码流恢复未知重复次数,最短合法码字仍需一 bit。零概率符号、码长上限、不等码字符成本以及 D 元输出也需要额外约定或算法变体。基本 Huffman 最优性定理本身也不包含码表传输成本或有限精度建模。

若用二叉堆实现最小优先队列,每次合并执行两次取最小和一次插入。共有 m−1 次合并,队列大小不超过 m;在权重比较、加法和节点操作按单位成本计的模型下,建树总时间为 O(mlog⁡m),存储树和队列需要 O(m) 个记录。若要求把所有码字逐 bit 写出,还须另计 Θ(∑iℓi) 的输出时间与空间;极不平衡的合法 Huffman 树可使这个总量达到 Θ(m2)。因此“建树近线性”不意味着显式码表的总 bit 长度也近线性。

推论与应用

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

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

长度选好后,规范Huffman码用符号顺序和码长表重建唯一的bit映射,并以整数空槽检查拒绝过订长度。这是码表表示与传输的接口,不重新证明或扩大本页的最优性范围。完整压缩流再规定EOF、位序和填充;ABABA的正文7位、含EOF有效码9位与整份文件200位分别属于不同账本。

若每符号码长还必须不超过给定上限,package-merge限长优化重新求解带约束的长度选择,而不是截短本算法的输出。权重1、1、2、3、5、8的无上限成本45需最深5层;上限3时最优成本47。原来的无上限交换证明与规范码映射接口继续保留。

参考资料
  • 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.
关系图谱15 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

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