有关数据压缩的字节配对的问题。如果字节配对将两个字节值转换为单个字节值,则将文件分成两半,然后获取一个gig文件并重复使用16次将其缩小为62,500,000。我的问题是,字节配对真的很有效吗?是否创建了5,000,000次迭代循环,保守,高效?我想要一些反馈和一些精辟的意见。
答案 0 :(得分:5)
一般来说,正如你所描述的那样,“递归压缩”是海市蜃楼:压缩实际上并不是这样的。
首先,您应该意识到所有压缩算法都有可能扩展输入文件而不是压缩它。您可以通过一个简单的计数参数来证明这一点:请注意,任何文件的压缩版本必须与任何其他文件的压缩版本不同(或者您将无法正确解压缩该文件)。此外,对于任何文件大小N
,都有固定数量的可能大小为<=N
的文件。如果任何大小为> N
的文件可压缩为<= N
大小,那么当“压缩”时,大小为<= N
的相同数量的文件必须扩展为大小>N
。
其次,“真正随机”的文件是不可压缩的。压缩有效,因为压缩算法希望接收具有某种可预测规则的文件。但是,“真正随机”的文件根据定义是不可预测的:每个随机文件都与相同长度的每个其他随机文件一样,因此它们不会压缩。
实际上,您有一个模型可以将某些文件视为比其他文件更可能;要压缩此类文件,您希望为输入文件选择较短的输出文件,这些文件更有可能。 Information theory告诉我们压缩文件的最有效方法是为每个输入文件P
分配一个长度为~ log2(1/P)
位的输出文件。这意味着,理想情况下,给定长度的每个输出文件大致等概率,就像“真正随机”文件一样。
在给定长度的完全随机文件中,每个文件的概率为(0.5)^(#original bits)
。上面的最佳长度是~ log2(1/ 0.5^(#original bits) ) = (#original bits)
- 也就是说,原始长度是你能做的最好的。
因为良好压缩算法的输出几乎是随机的,所以重新压缩压缩文件会让你几乎没有收获。由于次优的建模和编码,任何进一步的改进都是有效的“泄漏”;此外,压缩算法倾向于扰乱他们没有利用的任何规律性,进一步压缩这种“泄漏”更加困难。
关于这个主题的更长时间的阐述,有许多这类失败命题的例子,请参阅comp.compression FAQ。 “递归压缩”的主张突出。