【问题标题】:How does DEFLATE optimize this so much?DEFLATE 是如何优化这个的?
【发布时间】:2022-01-16 05:48:51
【问题描述】:

我正在尝试了解 deflate 算法,并且我已经阅读了 Huffman 代码以及 LZ77 压缩。我正在玩弄不同字符串的压缩大小,我偶然发现了一些我无法解释的东西。通过zlibgzip 压缩的字符串aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 的大小相同(36 个as)。

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

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

用中间的一个或多个bs 中断as 的字符串会大大增加大小。如果距离-长度对是在做这项工作,为什么它不能在向后搜索时跳过bs?还是使用了霍夫曼代码,而我误解了固定的霍夫曼代码的含义?

【问题讨论】:

    标签: compression gzip zlib deflate lz77


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,有道理,所以它基本上只是循环搜索缓冲区。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2017-04-10
    • 2014-09-09
    • 2013-04-03
    • 2011-02-28
    • 2011-03-05
    相关资源
    最近更新 更多