
78
|
第
6
章
b.
将
C
添加到
VLC
表中并更新表,
A
=
00
,
LIT
=
01
,
B
=
10
,
C
=
11
。
(9)
继续读取下一个符号,是
A
。
输出
A
对应的码字
00
并更新
VLC
表中的概率。
(10)
继续读取下一个符号,是
B
。
输出
B
对应的码字
10
并更新
VLC
表中的概率。
(11)
继续读取下一个符号,是
C
。
输出
C
对应的码字
11
并更新
VLC
表中的概率。
因此,最终的输出流为
00 1010 01 00 00 00 01 1011 01 1100 00 10 11
(见图
6-2
)。
字面值词
条码字
由于出现的概率有足
够大的变化,因此字
符A和LITERAL的码
字也发生了改变
图 6-2:最终编码后的输出流
那么接下来,你能用相反的步骤解码吗?
6.2.3
重置
自适应统计编码的真正强大之处在于,当输出流的熵要变大失控时,它能重置输出流。
以
[AAABBBBBCCCCCC]
为例,并将符号放在尖括号中来表示相应的字面值,如
< A >
。
对上述字符串编码后,得到如下的输出:
< A > ,0,0, < B > ,1,1,1,0, < C > ,11,11,11,11,0
注意,最后的码字
0
对应的是最后一个符号
C
,此时
C
的出现概率已经足够大,因而需要
重新为其分配码字。从中可以看到,更多的符号以及特定符号的更多出现是如何影响最终
输出的平均二进制位数的。当然,如果遇到符号
C
时就能重置
VLC
表,从而得到用码字
0
表示所有的
C
这样理想的结果就更好了,此时得到如下的输出:
< A > ,0,0, < B > ,1,1,1,0, < ...