0

我正在尝试理解放气算法,并且我已经阅读了霍夫曼代码以及 LZ77 压缩。我正在玩弄不同字符串的压缩大小,我偶然发现了一些我无法解释的东西。通过zlibgzipaaa压缩后的字符串大小与(36 s) 相同。aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

在阅读此内容之前,我会假设压缩器会执行诸如存储 36*a 而不是单独存储每个字符之类的操作,但我在规范中找不到任何提到的地方。

使用固定的霍夫曼代码产生了相同的结果,所以我假设节省空间的地方在于 LZ77,但它只使用距离-长度对。那如何允许 3 长度的字符串在不增加大小的情况下扩展 12 倍?

a在中间用一个或几个s打断 s 的字符串会b大大增加大小。b如果距离-长度对是做什么的,为什么它不能在向后搜索时跳过s ?或者是否使用了霍夫曼代码并且我误解了固定霍夫曼代码的含义?

4

1 回答 1

1

LZ77 对 36 个“a”进行有效的游程编码,将第一个“a”作为文字给出,然后匹配距离为 1,长度为 35。长度可以高达 258放气。

在线查找有关 LZ77、霍夫曼编码和放气的教程。您可以使用infgen分解生成的压缩数据,以更深入地了解数据的表示方式。

于 2021-12-12T17:57:58.343 回答