【问题标题】:Is there an algorithm for "perfect" compression?是否有“完美”压缩算法?
【发布时间】:2014-02-08 19:19:38
【问题描述】:

让我澄清一下,我不是在谈论能够压缩任何给定源材料的算法意义上的完美压缩,我意识到这是不可能的。我想要得到的是一种算法,它能够将任何源比特串编码为其绝对最大压缩状态,由它的香农熵确定。

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

考虑位串:a = "101010101010", b = "110100011010"。

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

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

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

使用单个位作为符号的 Huffman 编码是否会以最佳方式压缩位串,即使我们在 2 位符号级别分析字符串时会出现明显的模式?如果没有,是否可以通过循环遍历霍夫曼编码的不同“级别”(对不起,如果我在这里扼杀术语)来最佳地压缩源,直到找到最佳压缩率?在某些情况下,通过不同的“轮次”霍夫曼编码可以进一步提高压缩率吗? (例如,首先对 5 位长的符号进行霍夫曼编码,然后对 4 位长的符号进行霍夫曼编码?huff_4bits(huff_5bits(bitstring))

【问题讨论】:

  • 也许您应该更改问题并删除有关完美压缩的部分。 (我猜这是一个与量子计算相关的有效问题。)顺便问一下,你知道arithmetic coding吗?

标签: compression entropy information-theory


【解决方案1】:

正如 Mark 所说,由于 Kolmogorov 的复杂性,一般答案是“”。让我稍微扩展一下。

压缩基本上是两个步骤: 1) 型号 2) 熵

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

这就是“没有限制”的原因,而 Kolmogorov 复杂性只是表明:您永远无法保证没有更好的方法来“建模”数据。

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

霍夫曼在香农限制方面是最佳的如果您接受每个符号必须使用整数位数编码的限制。这是接近但不完美的近似。更好的压缩可以通过使用小数位来实现,这是算术编码器提供的,或者最近基于 ANS 的Finite State Entropy coder。两者都更接近香农极限。

仅当您“单独”处理一组符号时,香农限制才适用。一旦您尝试“组合它们”,或找到符号之间的任何相关性,您就是在“建模”。而这是不可计算的 Kolmogorov 复杂性的领地。

【讨论】:

  • 那么这是否意味着完美的压缩是不可能的?还是您可以完美地压缩某些东西但不知道您压缩了多少?或者这是否意味着您无法计算完美压缩保存实际完美压缩?
  • “完美压缩”的定义存在混淆风险。但是,如果您的意思是“有史以来最好的压缩”,那么答案是肯定的:您永远无法确定没有更好的方法来压缩给定的数据集。也许有,只是还没有被发现,或者它可能证明 CPU 过于昂贵,例如。即使达到这样更好的版本也只是推动标记:也许另一个存在更好的解决方案,等等。
  • 我喜欢这个答案讨论模型和 Kolmogorov 复杂性。我认为应该对其进行编辑以说明香农熵有一个静态模型,而不是它没有模型。维基百科:“虽然熵经常被用来表征数据源的信息内容,但这种信息内容并不是绝对的:它主要取决于概率模型...... Kolmogorov 复杂性......允许考虑一个独立于任何特定概率模型的序列;它考虑了输出序列的通用计算机的最短程序。”
【解决方案2】:

没有。可以证明,甚至没有一种算法可以确定完美压缩机的性能。见Kolmogorov Complexity

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-25
    • 2022-12-06
    • 1970-01-01
    • 2011-04-25
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多