思想

Huffman 编码是一种变长编码,是消除编码冗余的常用技术,对信源符号逐个编码时,它能给出较短的码字。

  • 缩减信源符号数量
    • 符号按照概率大小排序
    • 对概率最小两符号合并,计算合并后新符号概率并排序
    • 重复上述步骤,直至剩余符号不多于两个
  • 对各信源符号赋值
    • 赋值是合并的逆向过程

特点

  • 码表中的任意一个短码码字都不是码表中的长码码字的前缀,即前缀码。
  • 解码过程能自行确定码字的起始位置,解码唯一
  • 一旦有误码,对解码的影响是巨大的,因此 Huffman 编码抗干扰能力不强
  • 对于概率相差大的事件,Huffman 编码的编码效率是最高的,对于各概率均等的情况下,Huffman 编码退化为定长编码,效率最低

例题

假设输出信源有

符号 概率

求解其 Huffman 编码

解:

首先对其进行排序

符号 概率

然后递归地取概率最小的进行合并

  • 合并得到
  • 合并得到
  • 合并得到
  • 合并得到

然后反向开始进行编码,则有

  • 编码为 1, 为 0
  • 编码为 00, 为 01
  • 编码为 011, 为 010
  • 编码为 0100, 为 0101
  • 编码为 01010, 为 01011

因此最终得到

符号 概率 码字
011
1
01010
0100
01011
00

编码结束后,解码方得到对应编码表即可直接进行解码