任何声称「任意文件、越压越小」的软件,数学上等价于永动机。选一个文件,不停点「再压一次」,亲眼看着它第二轮就开始膨胀;最后再运行那个「压缩成功率 100%」的万能压缩器,看鸽笼原理当场拆穿它。
$ gzip novel.txt 7,016 B -> 3,198 B 又小了 54.4% $ gzip novel.txt.gz 3,198 B -> 3,221 B 开始膨胀 $ gzip novel.txt.gz.gz 3,221 B -> 3,244 B 每层 +23B 格式税 # 第 2 轮起,gzip 开始反向工作。这不是 bug,是数学。
四个文件,四种命运。先在心里猜一猜谁最耐压、谁一点就瘪,再点卡片验证。
每点一次「再压一次」,就给当前文件再套一层 gzip。盯住三个读数:大小、上一轮变化、熵。熵走到 8.00,说明信息已经塞满,一个比特都压不掉了。
把上面正在实验的文件压成 1 个字节。压缩成功率 100%,童叟无欺。至于还原嘛……先别问。
为什么「越压越小」注定失败?答案不需要微积分,只需要数鸽子。
2 字节文件有 65,536 种取值,1 字节只有 256 种。想把前者的每一种都映到后者,至少 65,280 个文件必须共享同一个压缩结果--解压器无法区分它们。这不是工程难题,是计数问题:球比洞多,就必然挤。
文本能压一半,是因为语言满是规律:q 后面几乎总是 u,常见词反复出现。照片压不动,是因为 PNG/JPEG 编码时已经把冗余吃干净了。随机数据一个比特都压不掉,因为它本来就没有规律。压缩算法不是在「变魔术」,是在「找规律」。
gzip 每套一层要交约 18~40 字节 的固定开销(文件头 + 校验和 + 存储块记账)。对压不动的数据,这笔税全额照收--这就是实验台里第二轮之后曲线缓慢上翘的原因。「压缩后的文件再压缩」稳赔不赚。
2002 年美国公司 Zeosync 宣称「突破了压缩极限」,拿融资上新闻,随后在技术圈的笑声中蒸发;荷兰发明家 Sloot 声称能把整部电影存进 8KB,源码在签约前夜随他一起消失。骗局的演示永远用文本和表格,永远不敢当众压缩一段掷硬币得到的随机数。
压缩的本质是把规律改写成短代码。规律是燃料,烧完就没了;随机是灰烬,谁也压不动它。任何「万能」压缩器的正确名字都叫:有损压缩 + 说谎的还原器。