我正在尝试理解放气算法,并且我已经阅读了霍夫曼代码以及 LZ77 压缩。我正在玩弄不同字符串的压缩大小,我偶然发现了一些我无法解释的东西。通过zlib和gzipaaa
压缩后的字符串大小与(36 s) 相同。aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
a
在阅读此内容之前,我会假设压缩器会执行诸如存储 36*a 而不是单独存储每个字符之类的操作,但我在规范中找不到任何提到的地方。
使用固定的霍夫曼代码产生了相同的结果,所以我假设节省空间的地方在于 LZ77,但它只使用距离-长度对。那如何允许 3 长度的字符串在不增加大小的情况下扩展 12 倍?
a
在中间用一个或几个s打断 s 的字符串会b
大大增加大小。b
如果距离-长度对是做什么的,为什么它不能在向后搜索时跳过s ?或者是否使用了霍夫曼代码并且我误解了固定霍夫曼代码的含义?