有人能解释一下LZSS算法和LZ77算法的区别吗?我已经在网上查找了几个小时,但是找不到区别。我找到了LZ77算法,并理解了它的实现。
但是,LZSS与LZ77有什么不同呢?假设我们有一个字符串"abracadabra",LZSS如何与LZ77不同地压缩它?是否有C伪代码可以遵循?
谢谢您的时间!
但是,LZSS与LZ77有什么不同呢?假设我们有一个字符串"abracadabra",LZSS如何与LZ77不同地压缩它?是否有C伪代码可以遵循?
谢谢您的时间!
abracadabra
假设窗口大小与输入数据一样大,那么我们可以将“abracadabra”表示为
abracad(-7,4)
(0,0,a)(0,0,b)(0,0,r)(0,1,c)(0,1,d)(0,3,a)
“LZSS”中的“SS”指的是一篇试图将字典压缩与滑动窗口的思想推广的论文(Storer, J. A. & Szymanski, T. G. (1982). Data compression via textual substitution. Journal of the ACM, 29(4), 928-951)。该论文研究了几种具有窗口的字典压缩方案的变体,因此,在其中你不会找到一个明确的“算法”。然而,大多数人使用术语“LZSS”来描述带有标志位的字典压缩方案,例如将“abracadabra”描述为 |0a|0b|0r|0a|0c|0a|0d|1-7,4| 在这种情况下,数字0和1实际上是前缀位,而不是字节。前缀位0表示“将下一个字节按原样复制到输出中”。前缀位1表示“接下来是用于复制匹配项的信息”。除此之外,没有其他具体内容,“LZSS”这个术语用于描述这些前缀信号位的使用。希望您能看出如何紧凑地完成这个过程,事实上比LZ77论文中描述的格式更有效率。