Tho*_*ens 21 windows compression 7-zip
使用 7Z 和普通 ZIP 压缩,一个 398MB 的目录仅被压缩到 393MB。这是正常的吗?如果是这样,为什么人们继续在 Windows 上使用 ZIP?
小智 32
压缩的工作原理是寻找要压缩的项目内部的重复模式。此外,由于您不想在压缩文件时丢失任何数据,因此压缩必须是无损(*)。
现在,在您的脑海中回想起这些,想想文件(项目)在计算机上的存储方式。在最底层,它们都只是一堆 0 和 1。
因此,问题可以转换为:“我如何以比原始表示更紧凑的方式表示一堆 1 和 0? ”
那么让我们从头开始,如何压缩单个位(单个 1 或单个 0)的正常表示?
答案很简单:你不能!...单个位以尽可能紧凑的方式表示。
公平地说,让我们举一个更大的例子,你将如何压缩像0111 0111 0100 0111这样的二进制字符串?
好吧,因为我们已经知道查看单个位对我们没有任何帮助,所以我们知道我们必须着眼于更大的规模。例如,让我们一次取 4 位。我们现在看到二进制字符串“0111”将在示例中出现 3 次,那么为什么我们不用一个位来表示它:0?但这仍然使 0100 处于黑暗中,所以让我们用“1”表示
我们知道已将原始压缩为:“0010”
这非常好!然而,这只是“霍夫曼编码算法”的基础知识,在现实世界中它会比这更复杂一些(你还需要存储一个包含编码信息的表,但这是一个回答这个问题有点远)。
现在真正回答你的问题:为什么不能把所有的数据压缩得那么好?,让我们再举一个例子:“0001 0110 1000 1111”,如果我们使用与上面相同的技术,我们将无法压缩数据(没有发现重复),因此不会从压缩中受益......
(*) 当然也有例外。最著名的例子是用于 MP3 文件的压缩。在将声音从原始文件转换为 MP3 格式时,一些关于声音的信息会丢失,因此这种压缩是有损的。另一个例子是图像的 .JPG 格式
无损数据压缩算法不能保证对所有输入数据集进行压缩。换句话说,对于任何(无损)数据压缩算法,都会有一个输入数据集在被算法处理时不会变小。这很容易通过使用计数论证的初等数学来证明。...
基本上,理论上不可能无损压缩所有可能的输入数据。