Algorithm 这两种算法都是LZSS的有效实现吗?

Algorithm 这两种算法都是LZSS的有效实现吗?,algorithm,compression,Algorithm,Compression,我是逆向工程的东西,我经常偶然发现各种解压算法。大多数时候,LZSS就像维基百科描述的那样: 初始化大小为2^n的字典 当输出小于已知输出大小时: 阅读标志 如果设置了该标志,则输出文字字节(并将其追加到字典末尾) 如果未设置该标志: 读取长度并向后看位置 从字典的后视位置转录长度字节到输出和字典末尾 问题是,这些实现遵循了两个如何对标志进行编码的流派。第一种方法将输入视为位序列: (……) 将标志读取为一位 若已设置,则将文本字节读取为8个未对齐位 如果未设置,则将长度和位置读取为n和m未

我是逆向工程的东西,我经常偶然发现各种解压算法。大多数时候,LZSS就像维基百科描述的那样:

  • 初始化大小为2^n的字典
  • 当输出小于已知输出大小时:
  • 阅读标志
  • 如果设置了该标志,则输出文字字节(并将其追加到字典末尾)
  • 如果未设置该标志:
  • 读取长度并向后看位置
  • 从字典的后视位置转录长度字节到输出和字典末尾
  • 问题是,这些实现遵循了两个如何对标志进行编码的流派。第一种方法将输入视为位序列:

  • (……)
  • 将标志读取为一位
  • 若已设置,则将文本字节读取为8个未对齐位
  • 如果未设置,则将长度和位置读取为n和m未对齐位
  • 这涉及大量的位移位操作

    另一种方法只对标志存储使用位操作,节省了一点CPU时间,而文字字节、长度和位置是从对齐的输入字节派生的。为了实现这一点,它通过提前获取几个标志来打破线性。因此,对算法进行如下修改:

  • (……)
  • 通过读取一个字节一次读取8个标志。对于这8个标志中的每一个:
  • 如果已设置,则将文本作为对齐字节读取
  • 如果未设置,则以对齐字节的形式读取长度和位置(从获取的字节中派生特定值需要一些位操作,但没有第一个版本那么昂贵。)

  • 我的问题是:这些都是有效的LZSS实现,还是我发现这些算法是错误的?它们有任何已知的名称吗?

    它们实际上是LZS上的变体,因为它们都使用一个位来决定文字与匹配。更一般地说,它们是LZ77上的变体

    Deflate也是LZ77上的一个变体,它不使用一个完整的位来进行文本与匹配。相反,deflate有一个用于文本和长度组合的代码,因此该代码隐式地确定下一个是文本还是匹配。长度代码后面跟着一个单独的距离代码

    (一种特定的算法,而不是一个系列)以不同的方式处理字节对齐,对文本的数量进行编码,后面必须跟一个匹配。包含文字数的第一个字节也有部分距离。文字是字节对齐的,文字后面的偏移量和剩余距离也是字节对齐的