对一个文件重复应用不同的压缩算法是否有效



我知道通过重复应用一种算法来无限压缩文件是不可能的。

但是,无论文件的结构如何,是否有可能通过重复应用不同的算法来继续压缩文件?

是的,你可以- 直到文件最终变为空 - 但当然,你只是将熵从文件本身移动到压缩算法的选择中(以及选择哪种压缩算法的记录)。

例如,让我定义以下压缩器,它查看文件中的前两个位,并对这些位进行编码,然后输出文件的其余部分不变。

算法compress00

如果文件中的前两位00,请替换这两个位 使用单个 0 位 - 在这种情况下,文件短 1 位。 否则,在文件前面加上 1 - 在这种情况下,文件为 1 位 长。

该算法很容易可逆(即,输出可以明确解压缩),并且它将文件缩短或延长 1 位。 想象一个由 4 个压缩器组成的系列:compress00, compress01, compress10, compress11,它们都具有相同的行为,除了例如,如果文件以01开头,则compress01缩短文件,否则会延长文件,其他压缩器会延长文件,依此类推。

请注意,现在每个至少有两个位的文件都以 00、01、10 或 11 开头 - 因此在重复压缩过程的每个阶段,您可以选择将文件压缩 1 位的算法。重复应用此过程会将文件减少到单个位(您可以为 1 位文件定义一些其他行为以降低到 0 位)。

当然,这种方法的一个非常小的缺点是,要有效地解压,您需要记住您在每一步选择了哪些压缩机。

No.
我们用来"加权"文件的单位是字节
字节只是更基本的单位的倍数。

虽然"位"这个词来自"二进制数字",但它实际上是一个测量单位,就像焦耳等一样。
比特测量可测量的最小信息量,就像e是最小的电荷一样。
当我们说文件的大小为 2 MiB 时,我们说有 220 + 3= 8.388.608 位信息。

现在,如果你想爬上一座20米高的山,你的体重50公斤,你至少需要E =mgh= 50 · 9.81 · 20 = 9810 J.
无论你做什么,你至少需要这种能量,否则你将无法到达那里1.
你也可以有更多的能量,9810 J是最低的。

同样的事情也适用于信息。文件携带一条消息,该消息至少需要X位信息才能明确理解。大多数文件包含的信息量
超过最少量的信息,因为文件易于处理。
这就像一个人在英语中说"我要出去"而不是"出去"。两者都给出相同的消息,但一个更容易处理,但时间更长。

因此,直观地,我们可以删除文件的冗余,从而减小其大小,直到达到最小X
在我们达到最小值后继续删除位意味着删除有用的信息,防止原始文件被恢复(阅读:解压缩)。
这实际上是通过有损算法完成的,例如 MP3、JPEG 等。

这种字符串不能无限压缩的直觉很容易证明。
我们遵循Sipser的《计算理论导论》第6.4章的方法。

我们以这种方式为字符串 s 分配权重:我们考虑所有算法A,在处理 a 时,新的字符串Ma输出s
我们将每个AMa编码为一个字符串,并将K(s)设置为此类字符串中最短的长度。
K(s)称为 s 的最小描述符,表示生成s所需的最小信息。

如果K(s)小于s的长度,则表示s可压缩
我们现在显示存在不可压缩的字符串。

假设s的长度为n。有 2n个可能的此类字符串。
如果s是可压缩的,那么它最多有一个长度的最小描述符n-1。有 1 + 2 + 4 + 8 + ... + 2 n-1
= 2n - 1个这样的描述符。
由于每个描述符唯一地定义一个字符串,并且描述符比长度为 n 的字符串少,因此长度为n的某些字符串是不可压缩的。
由任意长度的n个不可压缩的字符串存在。

简而言之,如果我们继续压缩,我们最终会得到一个不可压缩的文件。 在实践中,一个好的压缩算法应该在第一步消除大部分冗余,而不添加大量信息。
这就是为什么压缩 jpeg(一种已经压缩的格式)不会产生与压缩文本文件相同的结果。 这也解释了为什么加密文件似乎是随机的,因此没有任何冗余,不能很好地压缩。


1我们在这里只处理简单的牛顿物理学。

你可以,但它没有任何区别。大多数压缩算法基于减少冗余来运行,但是有些算法更有效,因此速度更慢。

现在,当您应用第一种算法时,它会减少这些冗余,因此应用第二种算法不会有太大区别。

查看此处了解更多信息。

最新更新