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

时间:2015-08-25 21:31:40

标签: algorithm compression

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

  
      
  1. 初始化大小为2 ^ n
  2. 的字典   
  3. 虽然输出小于已知输出大小:      
        
    1. 阅读标志
    2.   
    3. 如果设置了标志,则输出文字字节(并将其附加在字典的末尾)
    4.   
    5. 如果未设置标志:      
          
      1. 阅读长度查看位置
      2.   
      3. 长度字节从查看位置后的字典转录到输出和字典末尾。
      4.   
    6.   
  4.   

问题在于实现遵循两个如何编码标志的学校。第一个将输入视为位序列:

  
      
  1. (...)      
        
    1. 标志作为一位
    2. 读取   
    3. 如果已设置,则将文字字节读为8个未对齐位
    4.   
    5. 如果未设置,请将长度和位置读取为 n m 未对齐位
    6.   
  2.   

这涉及许多位移操作。

另一个通过仅对 flag 存储使用按位操作来节省一点CPU时间,而文字字节,长度和位置则从对齐的输入字节派生。为实现此目的,它通过提前获取一些标志来打破线性。所以算法修改如下:

  
      
  1. (...)      
        
    1. 通过读取一个字节一次读取8个标志。对于这8个标志中的每一个:      
          
      1. 如果已设置,则将文字读作对齐字节
      2.   
      3. 如果未设置,则将长度和位置读取为对齐字节(从获取的字节中获取特定值涉及一些位操作,但它没有第一个版本那么昂贵。)
      4.   
    2.   
  2.   

我的问题是:这些都是有效的LZSS实现,还是我确定这些算法错了?他们有没有已知的名字?

0 个答案:

没有答案