数据压缩中的 LZ77 算法详解
1. 字典压缩概述
在 1977 年之前,压缩研究主要集中在最小冗余编码上,如香农 - 范诺(Shannon - Fano)或霍夫曼(Huffman)算法,主要围绕使这些算法动态化(避免码表成为压缩文件的一部分)以及在速度、空间和效率方面进行改进。之后,以色列研究人员雅各布·齐夫(Jacob Ziv)和亚伯拉罕·伦佩尔(Abraham Lempel)提出了一种全新的压缩方法,开启了一个全新的研究方向。他们的核心思想不是对单个字符或符号进行编码,而是对字符串进行编码,利用压缩文件中先前出现过的短语字典来帮助编码后续短语。
例如,假设有一本普通的英语字典,文本文件中的每个单词都能在字典中找到。如果压缩器和解压缩器程序可以访问该字典的电子版本,就可以通过在字典中查找文本文件中的单个单词,并输出该单词所在的页码和在该页上的序号来进行编码。假设用 2 字节整数存储页码(很少有字典超过 65,536 页),用 1 字节存储单词在页上的序号(字典每页通常定义的单词不超过 256 个),那么文本文件中的每个单词,无论多长,都可以用 3 字节代替。显然,像 “a”、“in”、“up” 等短单词的大小会增加,但大多数单词有三个或更多字母,因此压缩文件的总体大小通常会减小。
2. LZ77 压缩算法描述
齐夫和伦佩尔的算法遵循字典压缩的思路,但不是使用静态预建的字典,而是根据压缩器在输入文件中已经看到的数据动态生成字典。并且,它不输出页码和单词序号,而是输出距离和长度值。其工作原理如下:在读取输入文件时,尝试将当前位置的字符集与输入文件中之前出现过的内容进行匹配。如果找到匹配项,计算匹配字符串与当前位置的距离以及匹配的字节数(长度)。如果找到多
超级会员免费看
订阅专栏 解锁全文
1234

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



