详解LZ77字典编码压缩和解压缩流程(典型的压缩算法)

本文详细介绍了LZ77字典编码的压缩和解压缩流程。LZ77是一种无损压缩算法,通过在字典区查找匹配字符串并用三元组(off, len, char)表示,实现数据压缩。文章通过实例展示了如何对字符串""AABCBBABC""进行编码,并解释了解压缩的过程。" 98746465,7729502,消息推送:全量与定向策略实现,"['前端开发', '消息系统', '用户交互', '数据存储']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字典编码本质上是将在字典中出现过的字符串使用一个索引值代替,以此来达到压缩目的。基于字典的压缩算法有很多,LZ77和LZ78是最原始的两个算法,后者是前者的变体,原理基本上相似。本文对LZ77字典编码的压缩和解压缩流程进行介绍。

一、什么是LZ77字典编码

LZ77算法是无损压缩算法,由以色列人Abraham Lempel发表于1977年,是典型的基于字典的压缩算法,现在很多压缩技术都是基于LZ77。

LZ77字典编码把整个滑动窗口分为2个区域,左侧为字典区,右侧为待编码区。

LZ77编码器在字典区查找,直到找到匹配的字符串。匹配字符串的开始位置与离字典区右边的距离称为“偏移值”,匹配字符串的长度称为“匹配长度”。LZ77在编码时,会一直在字典区中搜索,直到找到最大匹配字符串,然后输出一个三元祖(off, len, char),off表示偏移值,len表示匹配长度,char为待编码区第一个等待编码的字符。

偏移值实际上可以有两种,第一种是匹配字符串的开始位置离字典区左边的距离,第二种是匹配字符串的开始位置离字典区右边的距离,一般使用第二种。

二、LZ77编码的压缩流程

在编码前要指定滑动窗口的大小,这里设置为8,其中字典区窗口大小为5,待编码区窗口大小为3。
现在有字符串“AABCBBABC”,现在对其进行编码。
(1)编码开始,窗口初始位置如图
在这里插入图片描述
由上图可见,待编码区有“AAB”三个字符,此时字典区为空。现在编码第一个字符A,由于字典区为空,故匹配不到的字符串。当匹配不到字符串时,规定偏移值为0,匹配长度也为0,此时待编码区第一个等待编码的字符为A,故输出(0,0, A),然后滑动窗口右移一个单位,

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷恩Layne

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值