31、LZ77数据压缩算法详解

LZ77数据压缩算法详解

1. 数据压缩与解压缩原理

在使用LZ77算法进行数据压缩时,在任意时刻,前瞻缓冲区(look - ahead buffer)和滑动窗口(sliding window)之间存在两种情况:
- 存在一定长度的匹配短语。
- 完全没有匹配项。

当存在至少一个匹配时,我们将最长匹配编码为短语标记(phrase token)。短语标记包含三部分信息:
- 滑动窗口中匹配开始的偏移量。
- 匹配的符号数量。
- 匹配后前瞻缓冲区中的第一个符号。

当没有匹配时,我们将未匹配的符号编码为符号标记(symbol token)。符号标记仅包含未匹配的符号本身,实际上并没有实现压缩,甚至会因为多包含一位而导致轻微的膨胀。

生成编码了n个符号的适当标记后,我们将n个符号从滑动窗口的一端移出,并在另一端用从前瞻缓冲区移出的相同数量的符号替换。然后,我们重新填充前瞻缓冲区。这个过程确保滑动窗口始终只包含最新的短语。滑动窗口和前瞻缓冲区维护的短语的确切数量取决于它们的大小。

在实际应用中,典型的滑动窗口大小约为4K(4096字节),前瞻缓冲区通常小于100字节。

解压缩数据时,我们通过解码标记并以类似于压缩过程的方式更新滑动窗口。解码每个标记时,我们将标记编码的符号复制到滑动窗口中。遇到短语标记时,我们参考滑动窗口中的适当偏移量并查找指定长度的短语;遇到符号标记时,我们生成标记中存储的单个符号。

下面是一个使用LZ77压缩字符串“ABABCBABABCAD”的示例:
|步骤|原始数据|压缩数据|
| ---- | ---- | ---

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值