LZSS与LZ77压缩差异

问题描述 投票:-1回答:1

有人可以解释LZSSLZ77算法之间的区别。我已经在网上寻找了几个小时,但我找不到与众不同的地方。我找到了LZ77算法,并且了解了它的实现。

但是LZSSLZ77有何不同?假设我们有一个字符串"abracadabra"LZSSLZ77的压缩方式有何不同?有没有我可以遵循的C伪代码?

谢谢您的时间!

c compression difference lz77
1个回答
0
投票

[不幸的是,术语LZ77和LZSS往往都非常宽松地使用,因此它们实际上并不意味着非常特定的算法。当人们说他们使用LZ77算法压缩数据时,通常意味着他们实现了基于字典的压缩方案,其中进入最近解压缩的数据的固定大小的窗口用作字典,并且替换了压缩期间的某些单词/短语通过引用窗口中以前看到的单词/短语。

让我们考虑单词形式的输入数据

abracadabra

并假设窗口可以和输入数据一样大。然后我们可以将“ abracadabra”表示为

abracad(-7,4)

[这里我们假定字母是照原样复制的,括号中两个数字的含义是“从我们现在的位置返回7个位置,并从此处复制4个符号”,其复制了“亚伯”。

这是任何LZ77压缩机的基本思想。现在,细节决定了魔鬼。请注意,原始单词“ abracadabra”包含11个字母,因此,假设该单词以ASCII表示,则其长度为11个字节。我们的新表示形式包含13个符号,因此,如果我们假设相同的ASCII表示形式,则仅扩展原始消息,而不压缩它。可以证明,无论实际情况如何,有时任何压缩机都可能发生这种情况。

因此,压缩效率取决于您存储有关未压缩字母和反向引用的信息的格式。最初描述LZ77算法(Ziv, J. & Lempel, A. (1977) A universal algorithm for sequential data compression. IEEE Transactions on information theory, 23(3), 337-343)的原始论文使用的格式可以在此处粗略地描述为

(0,0,a)(0,0,b)(0,0,r)(0,1,c)(0,1,d)(0,3,a)

因此,压缩数据是由三项组成的组的序列:要从中复制的缓冲区中的绝对位置(非相对位置!),字典匹配的长度(0表示未找到匹配项)以及后面的字母比赛。由于大多数字母都与字典中的任何内容都不匹配,因此您可以看到,除了非常可压缩的数据外,这对于任何内容都不是特别有效的格式。

这种低效率很可能是LZ77原始形式未在任何实际压缩机中使用的原因。

“ 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论文中描述的格式更有效。

© www.soinside.com 2019 - 2024. All rights reserved.