让我们假设我们有一个由包含50个符号的字母表中的符号组成的序列。因此,每个符号都可以用7个比特(2^7 = 64 > 50
(进行编码。这意味着每个给定的符号序列都可以表示为0和1的序列。
现在,让我们假设序列中的符号不是完全随机的,所以它们在某种程度上是可预测的。更详细地说,给定序列中的前N个符号,我们可以估计每个符号作为序列中的下一个符号的可能性。例如,我们可以说A
预计以概率0.01出现,B
预计以概率0.3出现,依此类推
我相信这样的预测模型可以用来压缩数据。我的问题是应该如何做到这一点。或者,更详细地说,使用预测模型压缩数据的最佳方式是什么。
我朝着以下方向思考。在给定的阶段,对于所有符号,我们都有估计的概率,所以所有符号都可以根据它们的概率排序(从最可能的符号到最不可能的符号(。然后第一个符号由0编码,第二个由1编码,第三个由00编码…所以,编码是:
[0, 1, 00, 01, 10, 11, 000, 001, ..., 111110, 111111]
通过这种方式,符号通常会得到少量比特的编码。但是,这些编码包含逗号。例如,原始符号序列可以表示为:
[0, 00, 1, 10, 0, 0, 1, 0110, ...]
逗号不在字母表中。
我还考虑了以下按概率排序的列表中符号的编码:
[0, 10, 110, 1110, 11110, 111110, ....]
然后0被用作分隔符(而不是逗号(,1的数量表示符号在列表中的位置。但同样,我不确定这是否是使用比特的最有效方式,也是使用预测模型的最佳方式。
是的,这样的预测模型可以用于压缩数据,只要该模型能够很好地预测下一个符号。这正是算术编码所设想的那种概率模型。