Compression “是否有一个算法?”;“完美”;压缩?

Compression “是否有一个算法?”;“完美”;压缩?,compression,entropy,information-theory,Compression,Entropy,Information Theory,让我澄清一下,我不是说完美的压缩,我意识到这是不可能的。我试图得到的是一种算法,它能够将任何源比特串编码到它的绝对最大压缩状态,这是由它的香农熵决定的 我相信我听说过哈夫曼编码在某种意义上是最优的,所以我相信这个加密方案可能基于此,但我的问题是: 考虑位字符串:a=“101010101010”,b=“110100011010” 使用简单的Shannon熵,当我们将比特串看作是0和1的简单符号时,这些位串应该具有完全相同的熵,但是这种方法是有缺陷的,因为我们可以直观地看到,位串A比比特串B具有更少

让我澄清一下,我不是说完美的压缩,我意识到这是不可能的。我试图得到的是一种算法,它能够将任何源比特串编码到它的绝对最大压缩状态,这是由它的香农熵决定的

我相信我听说过哈夫曼编码在某种意义上是最优的,所以我相信这个加密方案可能基于此,但我的问题是:

考虑位字符串:a=“101010101010”,b=“110100011010”

使用简单的Shannon熵,当我们将比特串看作是0和1的简单符号时,这些位串应该具有完全相同的熵,但是这种方法是有缺陷的,因为我们可以直观地看到,位串A比比特串B具有更少的熵,因为它只是重复10的模式。考虑到这一点,我们可以通过计算复合符号00、10、01和11的香农熵来更好地了解源的实际熵

这只是我的理解,我可能完全偏离了基准,但从我的理解来看,对于一个遍历源来说是真正随机的,对于一个长度为n的遍历源来说。所有n个长度的符号组的统计概率必须相等

我想比标题中的问题更具体一些,我有三个主要问题:


使用单个位作为符号的哈夫曼编码是否会像压缩字符串一样优化地压缩位字符串,即使我们在2位符号级别分析字符串时会出现明显的模式?如果不是的话,我们可以通过循环使用哈夫曼编码的不同“级别”(抱歉,如果我在这里断章取义)来优化压缩源,直到找到最佳压缩率吗?在某些情况下,通过不同的哈夫曼编码“循环”会进一步提高压缩率吗?(例如,首先对5位长的符号进行哈夫曼编码,然后对4位长的符号进行哈夫曼编码?
huff_4bits(huff_5bits(bitstring))

不。可以证明,甚至没有一种算法可以确定一个完美的压缩器的性能。看


哈夫曼编码(或算术编码)本身并不能达到最佳压缩。需要使用其他技术来利用数据中的高阶冗余。

如Mark所述,由于Kolmogorov的复杂性,一般的答案是“否”。让我在这一点上展开一点

压缩基本上分为两个步骤: 1) 模型 2) 熵

模型的作用是“猜测”下一个字节或字段。 模型可以有任何形式,其有效性没有限制。 一个简单的例子是随机数生成器函数:从外部角度看,它看起来像噪声,因此无法压缩。但是如果你知道生成函数,一个无限长的序列可以被压缩成一小部分代码,生成函数

这就是为什么“没有限制”,Kolmogorov complexity只是说:你永远不能保证没有更好的方法来“建模”数据

第二部分是可计算的:熵是你找到“香农极限”的地方。 给定一组符号(通常是模型的输出符号),它们是字母表的一部分,您可以计算最佳成本,并找到一种方法来达到经验证的最终压缩极限,即香农极限

哈夫曼对于香农限制是最优的如果您接受每个符号必须使用整数位数进行编码的限制。这是接近但不完美的近似。更好的压缩可以通过使用分数比特来实现,分数比特是算术编码器所提供的,或者是最近基于ANS的编码。两者都更接近香农极限


香农限制仅适用于“单独”处理一组符号的情况。一旦你试图“组合它们”,或找到符号之间的任何关联,你就是在“建模”。这是Kolmogorov复杂性的领域,它是不可计算的。

也许你应该改变这个问题,去掉关于完美压缩的部分。(我想这是一个关于量子计算的有效问题。)顺便问一下,你知道吗?那么这是否意味着完美的压缩是不可能的?或者你可以完美地压缩某个东西,但却不知道压缩了多少?或者,这是否意味着你不能计算完美压缩,而不能实际完美压缩?关于“完美压缩”的定义存在混淆风险。但如果你的意思是“有史以来最好的压缩”,那么答案是肯定的“不”:你永远无法确定没有更好的方法来压缩给定的数据集。也许有,只是还没有被发现,或者它可能被证明是昂贵的CPU的例子。即使达到了这样好的版本,也只是在推动目标:可能存在另一个更好的解决方案,等等。我喜欢这个答案讨论模型和Kolmogorov复杂性。我认为应该对它进行编辑,说明香农熵有一个静态模型,而不是说它没有模型。维基百科:“尽管熵通常被用作数据源信息内容的表征,但这种信息内容并非绝对的:它主要取决于概率模型。。。科尔莫戈罗夫复杂性。。。允许独立于任何特定概率模型考虑序列的信息内容;它考虑输出序列的通用计算机的最短程序。”