一 点睛
通常的编码方法有固定长度编码和不等长编码两种。这是一个涉及最优编码的问题,目的是使得总码长度最短。这个问题是利用字符的使用频率来编码,是不等长编码的方法,使得经常使用的字符编码较短,不常使用的编码较长,如果采用等长的编码方法,假设所有的编码都等长,则表示 n 个不同字符需要 logn 位。假设 3 个不同的字符 a、b、c,至少需要两个二进制数表示。
a:00
b:01
c:10
如果每个字符的使用频率都相等,则固定长度编码是空间效率最高的方法。
不等长的编码方法需要解决两个关键问题:
a 编码尽可能短
我们可以让使用频率高的字符编码较短,使用频率低的字符编码较长,这种方法可以提高压缩率,节省空间,也能提高运算和通信速度,即频率越高,编码越短。
b 不能有二义性
例如:假设 ABCD 四个字符编码如下。
A:0
B:1
C:01
D:10
那么现在有一列数 0110,是翻译成 ABBA、ABD、CBA,还是CD,这种编码是有问题的,那么如何消除二义性呢?解决的方法是:任何一个字符的编码不能是另外字符编码的前缀。
1952 年,数学家 D.A.Huffman 提出了一种最佳编码方式,被称为哈夫曼编码。哈夫曼编码很好地解决了上面提到的两个关键问题ÿ