ZIP 等文件压缩的核心步骤之一是使用先前解码的文本作为参考源。例如,编码流可能会说“接下来的 219 个输出字符与 5161 字节前解码流中的字符相同”。这使您可以仅用 3 个字节左右来表示 219 个字符。(ZIP 不仅如此,比如霍夫曼压缩,但我只是在谈论参考匹配。)
我的问题是字符串匹配算法的策略是什么。即使查看来自 zlib 的源代码等似乎也不能很好地描述压缩匹配算法。
问题可以表述为:给定一个文本块,比如 30K 和一个输入字符串,在 30K 文本中找到与输入字符串前面完全匹配的最长引用。” 算法在迭代时必须高效,即,将通过从前面删除一些字节并在后面添加新字节并执行新匹配来更新 30K 文本块。
我对讨论执行此操作的算法更感兴趣,而不是源代码或库。(zlib 有很好的来源!)我怀疑可能有几种不同的权衡方法。