Random 您可以实现的随机二进制数据的最佳文件压缩是什么?

Random 您可以实现的随机二进制数据的最佳文件压缩是什么?,random,compression,binary-data,Random,Compression,Binary Data,具体来说,有哪些程序以及哪些程序具有最高的压缩比?我试着用谷歌搜索,但似乎经验会胜过搜索结果,所以我问。没有一种通用的最佳压缩算法。人们发明了不同的算法来处理不同的数据 例如,JPEG压缩允许您大量压缩图像,因为图像中的红色是0xFF还是0xFE(通常)并不重要。但是,如果您试图压缩文本文档,这样的更改将是灾难性的 此外,即使在两种用于处理相同类型数据的压缩算法之间,结果也会因数据而异 示例:有时使用gzip tarball更小,有时使用bzip tarball更小 最后,对于长度足够的真正随机

具体来说,有哪些程序以及哪些程序具有最高的压缩比?我试着用谷歌搜索,但似乎经验会胜过搜索结果,所以我问。

没有一种通用的最佳压缩算法。人们发明了不同的算法来处理不同的数据

例如,JPEG压缩允许您大量压缩图像,因为图像中的红色是0xFF还是0xFE(通常)并不重要。但是,如果您试图压缩文本文档,这样的更改将是灾难性的

此外,即使在两种用于处理相同类型数据的压缩算法之间,结果也会因数据而异

示例:有时使用gzip tarball更小,有时使用bzip tarball更小


最后,对于长度足够的真正随机数据,您的数据可能与原始数据的大小几乎相同(甚至更大)。

如果可以将文件大小精确指定为位,则对于任何文件大小N,都可能有2^(N+1)-1个N位或更小的文件。为了将大小为X的文件映射到较小的Y,必须将大小为Y或更小的文件映射到大小为X或更大的文件。无损压缩唯一可行的方法是,如果某些可能的文件比其他文件更有可能被识别出来;在这种情况下,可能的文件将缩小,不太可能的文件将增加

作为一个简单的例子,假设一个人希望无损地存储一个文件,其中的位是随机和独立的,但是设置的位不是50%,而是只有33%。可以通过获取每对位并写入“0”(如果两位均为空)、10(如果第一位已设置,第二位未设置)、110(如果第二位已设置,第一位未设置)或111(如果两位均已设置)来压缩这样的文件。结果是,每对位将在44%的时间内变为一位,22%的时间内变为两位,33%的时间内变为三位。虽然一些数据串会增加,但其他数据串会减少;如果概率分布如预期的那样,收缩的对数将超过增长的对数(4/9文件将收缩一点,2/9文件将保持不变,3/9文件将增长,因此对数平均收缩1/9位,文件平均收缩1/18[因为1/9数字是每对位])


请注意,如果位实际上有50%的分布,那么只有25%的对将成为一位,25%将保留两位,50%将成为三位。因此,25%的位将收缩,50%的位将增长,因此对平均将增长25%,文件将增长12.5%。盈亏平衡点约为38.2%的位被设置(2减去黄金平均值),这将产生38.2%的位对收缩和相同百分比的增长。

真正的随机数据无法压缩。;-)更有用的答案是:被压缩数据的属性是什么?(声音、图像、视频、二进制可执行文件等)你能容忍信息丢失吗?显然,随机数据是不可能压缩的。想象一下。不可能的。所以我不应该这么做?这太令人失望了。“真正的随机数据无法压缩。”哈哈。错。完全分散的真正随机数据无法压缩。压缩依赖于冗余,而冗余在随机数据中是非常可能的。诚然,由于随机数据的分布更为均匀,您可能不会从中获得太多压缩,但这肯定是可能的。@Andrew您是说:如果您压缩每个可能的n字节文件,压缩结果的平均大小将小于n字节?我很确定你能从数学上证明这一点。非常非常轻微,是的。真正的随机性!=完全非冗余分布;因此,由于即使是少量的预期冗余,应用的最佳压缩算法将导致文件大小略微减小。我认为这是Kolmogorov复杂性的一个简单解释。不错。更详细的解释会让许多读者的眼睛变得呆滞。虽然一次将两个比特压缩为1-3个输出比特的方法很简单,但我认为它很好地表达了挑战的本质。将1-3个输入位压缩为2个输出位是另一种方法,例如(000001,01,1),但计算相关概率会更困难。对“为什么”压缩工作的极好解释。我一直是眼镜的受害者+1必须有一种通用的最佳压缩算法。我认为逻辑要求这是正确的,除非有多个相同压缩比的算法结合在一起以获得最佳压缩比。确实有许多方法可以被认为是“结合”以获得特定类型数据的最佳压缩比,以及许多专门用于特定类型数据的方法,这些方法为这些类型的数据提供了比一般方法(音频、图片、电影等)更好的性能。您需要确定可以对数据做出哪些假设,更多的假设通常(但不总是)会导致该特定类型数据的更高压缩比。