在提出基于滑动窗口的LZ77算法后,两位大神Jacob Ziv与Abraham Lempel于1978年在发表的论文 [1]中提出了LZ78算法;与LZ77算法不同的是LZ78算法使用动态树状词典维护历史字符串。
1. 原理
压缩
LZ78算法的压缩过程非常简单。在压缩时维护一个动态词典Dictionary,其包括了历史字符串的index与内容;压缩情况分为三种:
- 若当前字符c未出现在词典中,则编码为
(0, c); - 若当前字符c出现在词典中,则与词典做最长匹配,然后编码为
(prefixIndex,lastChar),其中,prefixIndex为最长匹配的前缀字符串,lastChar为最长匹配后的第一个字符; - 为对最后一个字符的特殊处理,编码为
(prefixIndex,)。
如果对于上述压缩的过程稍感费解,下面给出三个例子。例子一,对于字符串“ABBCBCABABCAABCAAB”压缩编码过程如下:
1. A is not in the Dictionary; insert it
2. B is not in the Dicti
本文详细介绍了LZ78压缩算法的原理,包括压缩过程中的三种编码情况,并通过实例解析了压缩与解压缩的步骤。此外,还探讨了LZ系列压缩算法的变种,如LZSS和LZW。文章提供了Python 3.5的LZ78算法实现,并引用了相关文献供进一步阅读。
订阅专栏 解锁全文
1088

被折叠的 条评论
为什么被折叠?



