我正在尝试实现LZ77压缩算法,并且遇到了此问题。
我正在逐字节压缩输入(可以是任何二进制文件,不仅是文本文件),而且我使用3个字节来表示对先前子字符串的指针/引用。指针的第一个字节始终是转义字符b“ \ xCC”,为了使事情变得简单,我们将其称为C。
我知道使用转义字符时的“标准”方式是,您对所有其他字符进行正常编码,然后转义与转义字符具有相同值的文字。因此,“ ABCDE”编码为“ ABCCDE”。
问题在于,指针的值可能是“ CCx”,第二个字节可能是“ C”,并使指针与转义的文字“ CC”无法区分,这会导致问题。
该如何解决?或做LZ77的正确/标准方法是什么?谢谢!
答案 0 :(得分:0)
要使LZ77有用,必须在其后跟随一个熵编码器。在这一步中,您将符号编码为压缩数据中的位。
一种方法是定义258个符号,为文字字节定义256个符号,一种表示匹配的长度和距离,另一种表示流的结尾。
或者您可以执行deflate的工作,即将长度和文字编码在一起,以便该符号解码为文字字节或长度,其中长度表示要跟随距离代码。
或者您可以执行brotli所做的事情,即定义“插入并复制”代码,该代码给出文字数量,然后是那么多文字代码,然后是复制长度和距离。
或者您也可以发明自己的东西。