mur*_*d99 16
数据具有称为熵的东西:每个新位给出的新信息量.例如,10101010101010101010具有低熵,因为您不需要下一位来了解接下来会发生什么.完美的压缩算法会压缩到最大熵,因此每个位都会提供信息,因此无法删除,从而使大小最小化.
Mar*_*ers 11
不能再次压缩已经压缩的数据.如果您使用包含1百万个零的文件并使用gzip对其进行压缩,则生成的压缩文件为1010个字节.如果再次压缩压缩文件,它将进一步减少到只有75个字节.
$ python
>>> f = open('0.txt', 'w')
>>> f.write('0'*1000000)
>>> f.close()
>>>
$ wc -c 0.txt
1000000 0.txt
$ gzip 0.txt
$ wc -c 0.txt.gz
1010 0.txt.gz
$ mv 0.txt.gz 0.txt
$ gzip 0.txt
$ wc -c 0.txt.gz
75 0.txt.gz
之所以说它是不太可能的是压缩工作两次是因为压缩过程中去除冗余.如果冗余较少,则进一步压缩文件会更加困难.
有关这个问题的非常学术性的答案,请查看信息熵!但是,如果你像我一样,这篇文章会让你头疼.
一个更简单的答案:假设你可以一次又一次地压缩,比如每次10倍.你可以将维基百科压缩到一个GB,然后是100M,然后是10M ......这样做9次,你就会减少到一个字节.如果维基百科中的所有信息都可以压缩到一个字节,人们就不需要编写它,他们可能只扩展了256个可能的字节中的一个,其中一个就是维基百科的内容:)
一个更明智的答案:文本是多余的:这些字节中的信息可以更紧密地表达.例如,维基百科的文章提到了'q'几乎总是跟着'u'这一事实.'E'比'T'更常出现.等等.类似地,在程序中,经常发现0比任何其他数字更频繁.这种一致性可以被利用和"挤出".但是,一旦你完成了这一次,最初的冗余基本消失了.压缩文件几乎没有"浪费的比特".
| 归档时间: |
|
| 查看次数: |
1654 次 |
| 最近记录: |