Answers:
如果要压缩已压缩的内容(AVI,JPEG,MP3),则除了将所有内容打包到单个文件中之外,您不会获得太多收益。
压缩通过在要压缩的项目内部寻找重复模式来进行。另外,由于您不想在压缩文件时丢失任何数据,因此压缩必须是无损的(*)。
现在,将其放在脑后,考虑一下文件(项目)在计算机上的存储方式。在最低级别上,它们都是一堆0和1。
因此,问题可以转换为:“ 我怎么能以比原始表示更紧凑的方式表示一堆1和0? ”
因此,让我们从头开始,如何压缩单个位(单个1或单个0)的普通表示形式?
答案真的很简单:您不能!...以最紧凑的方式表示单个位。
公平地说,让我们举一个更大的例子,如何压缩二进制字符串,如0111 0111 0100 0111?
好吧,因为我们已经知道查看单个位根本不会对我们有帮助,所以我们知道我们必须考虑更大的规模。例如,让我们一次取4位。现在我们看到在示例中二进制字符串“ 0111”会出现3次,所以为什么不用0来表示呢?但这仍然使0100处于黑暗中,因此让我们用“ 1”表示。
我们知道已将原始文件压缩为:“ 0010”
这非常好!但是,这只是“霍夫曼编码算法”的基础知识,在现实世界中会比这复杂一些(而且您还需要在其中存储包含编码信息的表,但这是一个回答这个问题有点远)。
现在要真正回答您的问题:为什么不能对所有数据进行压缩那么好?让我们再举一个示例:“ 0001 0110 1000 1111”,如果我们使用与上述相同的技术,将无法压缩数据(找不到重复),因此无法从压缩中受益...
(*)当然有例外。最著名的例子是用于MP3文件的压缩。在这里,有关声音的某些信息在将其从原始原始文件转换为MP3格式时会丢失,因此这种压缩是有损的。另一个示例是图像的.JPG格式
无损数据压缩算法不能保证对所有输入数据集进行压缩。换句话说,对于任何(无损)数据压缩算法,将有一个输入数据集,当该算法处理时,输入数据集不会变小。使用计数参数的基础数学很容易证明这一点。...
基本上,从理论上讲,无损压缩所有可能的输入数据是不可能的。
这正常吗?
否。不适用于“普通”文件。您要压缩哪种文件?如果它们已经被压缩,例如它们是JPG,GIF,PNG,视频或什至其他zip文件,则它们不会被任何算法压缩太多。如果尝试压缩Text,XML,未压缩的BMP,源代码等文件,则zip将提供良好的压缩效果,但可能不是绝对最佳。
人们为什么继续在Windows上使用ZIP?
原因之一是系统中内置了良好的zip处理功能-您可以右键单击任意位置并创建一个新的zip文件,然后将其放入其中。您只需双击一个zip文件,它就会像一个文件夹一样打开。您可以从其中复制内容,有时甚至可以就地使用它。您不需要安装WinZip或7z或任何其他程序。我通常建议人们不要。