【发布时间】:2021-08-25 06:33:31
【问题描述】:
假设我们有由字母表中的符号组成的序列,其中包含 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的个数代表符号在列表中的位置。但同样,我不确定这是使用比特的最有效方式以及利用预测模型的最佳方式。
【问题讨论】:
-
我会说最好读一本关于压缩技术的书,例如ceng2.ktu.edu.tr/~cakir/files/sistemlab/…
-
对于预测编码,您使用您的模型进行预测,并对残差(误差)进行编码,其思想是误差通常很小,并且有利于编码的分布。第二部分是关于可变长度代码。分隔符问题可以通过例如前缀代码来解决。
标签: compression entropy information-theory