我目前正在阅读有关编码/解码数据的 DEFLATE 方法。我理解这个过程由两部分组成:
我。将重复信息(在指定窗口内)替换为对之前相同片段的引用。
二。使用霍夫曼编码减小最常出现的符号的大小。
我有一个关于 (i) 的问题。 DEFLATE 使用 LZ77,它基于大小窗口搜索信息,如果发现任何重复信息,则用“指针”替换它。这是完全有道理的。
然而,当使用 LZ77 解码时,DEFLATE 如何识别指针? (指针是长度-距离对;您如何辨别它是指针还是初始数据中存在的数字?)
引用:http://en.wikipedia.org/wiki/DEFLATE#Duplicate_string_elimination
最佳答案
推荐阅读Deflate RFC 1951 specification ,这更精确,并回答这样的问题。
您将在 => 3.2.5 中看到什么。压缩 block (长度和距离码)
“文字和长度字母表合并为一个字母表”
这意味着,通过简单地检索下一个符号,您可以立即知道它是文字 (0..255)、匹配长度 (257..285),甚至是 block 的结尾 (256)。在匹配长度的情况下,也必须解码引用(偏移量)。偏移量使用单独的树进行编码。
关于algorithm - 放气解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8994643/