【发布时间】:2022-01-16 05:48:51
【问题描述】:
我正在尝试了解 deflate 算法,并且我已经阅读了 Huffman 代码以及 LZ77 压缩。我正在玩弄不同字符串的压缩大小,我偶然发现了一些我无法解释的东西。通过zlib 和gzip 压缩的字符串aaa 与aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 的大小相同(36 个as)。
在阅读有关此内容之前,我会假设压缩器会执行诸如存储 36*a 而不是单独存储每个字符之类的操作,但我在规范中找不到任何提到的地方。
使用固定的 Huffman 代码产生了相同的结果,所以我假设 LZ77 节省空间,但它只使用距离-长度对。那如何允许 3 长度的字符串在不增加大小的情况下扩展 12 倍?
用中间的一个或多个bs 中断as 的字符串会大大增加大小。如果距离-长度对是在做这项工作,为什么它不能在向后搜索时跳过bs?还是使用了霍夫曼代码,而我误解了固定的霍夫曼代码的含义?
【问题讨论】:
标签: compression gzip zlib deflate lz77