编码
信息论研究目标: 用最少的编码表示传递信息.
举一个例子来感性认识一下:
假设两地互相通信,两地之间一直在传递A,B,C,D四类消息,那应该要选择什么样的编码方式才能尽可能少的使用资源呢?
等长编码
如果这四类消息的出现是等概率的,都为1414,那么肯定应该采用等编码方式,也就是
信息 | A | B | C | D |
---|---|---|---|---|
编码 | 00 | 01 | 10 | 11 |
这样就能达到最优的编码方式,平均编码长度为2×14×4=22×14×4=2
但是,如果四类消息出现的概率不同呢?例如, A消息出现的概率是1212,B是1414,C是1818,D是1818,那应该怎样编码呢?
不等长编码
直觉告诉我们,为了使平均编码长度尽可能小,出现概率高的A消息应该使用短编码,出现概率低的C,D消息应该使用长编码。与等长编码相比,这样的编码方式叫做变长编码,它的效果更好. 这实际上是哈夫曼编码.
哈夫曼编码的原则:
- 对出现概率大的符号分配短字长的二进制码,
- 对出现概率小的符号分配长字长二进制码,得到符号平均码长最短的码。
- 将信息符号按其出现概率从大到小排列;
- 将两个最小概率组成一组,划成2个分支域,并标以0 和1;再把2 个分支域合并成1个支域,标以两个概率之和;
- 依次类推,直到概率之和等于1.0;
- 找出概率和1.0 到各信息符号的路径,记下各路径从右到左各分支域的0 和1,即得到信息符号相应的码字。(反向编码)
哈夫曼编码过程举例:
从右往左, 以此给ABCD反向编码如下:
信息 | A | B | C | D |
---|---|---|---|---|
编码 | 0 | 10 | 110 | 111 |
概率 | 1/21/2 | 1/41/4 | 1/81/8 | 1/81/8 |
平均编码长度为1×12+2×14+3×18+3×18=1.751×12+2×14+3×18+3×18=1.75,显然要优于等长编码, 这也是最优编码.
编码空间
在对消息进行变长编码时,可以看到对A消息编码后,后面的三类消息编码都不是以0开头。这是因为在编码时必须保证该编码是唯一可解码的。例如若A消息编码为0,B消息编码为01,那么0101的编码就会产生歧义,即不知道在何位置对接收到的编码消息进行划分。因此在进行变长编码时,就必须保证任何编码都不是其他编码的前缀。符合这种特性的编码称为前缀码(Prefix Codes)。
从上面的叙述可以看出,每当在某位置选取一个编码以后,我们都要损耗一部分编码空间,如图
当我们在第2个bit选择了编码1,那为了满足前缀码的特性,就会导致有1414的编码空间不能继续使用了。事实上,长度为L的编码会使得12L12L的编码空间不能继续使用。
因此,为了达到对信息进行最优编码的目标,我们要在使用尽可能短的编码与短编码可能会导致编码空间不可用的两种情况中进行权衡。
我们可以把使用短编码需要消耗的编码空间称为编码代价。事实上,为了达到理论上的最优编码,我们只需要根据不同消息X出现的概率P(X)给每类消息分配相应的编码代价即可以达到最优编码,假设X的编码长度为L(X),那么