Deflate内部实现(LZ77无损压缩算法)超详细图解算法版
创作时间:
作者:
@小白创作中心
Deflate内部实现(LZ77无损压缩算法)超详细图解算法版
引用
CSDN
1.
https://blog.csdn.net/qq_29493173/article/details/139805208
无损压缩算法
Deflate算法是一种广泛使用的无损数据压缩算法,主要用于文件压缩和网络传输。它由两个阶段组成:重复消除(LZ77算法)和位减少(Huffman编码)。
第一阶段:重复消除 — LZ77无损压缩算法
LZ77算法是一种基于字典的无损压缩算法,通过查找重复的未压缩序列并用引用指针替换它们来实现压缩。引用指针由两个元素定义:
- offset(距离):原始未压缩数据中出现的第一个现有字节的相对位置。
- Length(长度):重复的字节长度。
LZ77算法使用“滑动窗口”技术,窗口分为两个部分:
- 查找缓冲区(Search buffer):已编码部分,也称字典。
- 先行缓冲区(Look ahead buffer):即将进行编码序列的一部分。
滑动窗口的尺寸是影响压缩性能的关键因素。如果窗口太小,可能会发现较少的重复数据序列,导致压缩文件较大;如果窗口太大,则可能需要更长时间来查找重复数据序列,导致压缩速度变慢。
LZ77算法的主要步骤如下:
- 将编码位置设置为输入流的开头。
- 在查找缓冲区的窗口中找到最长的匹配项。
- 如果找到匹配,则输出指针P。将编码位置(和窗口)向前移动L个字节。
- 如果未找到匹配项,则输出空指针和先行缓冲区中的第一个字节。将编码位置(和窗口)向前移动一个字节。
- 如果先行缓冲区不为空,则返回步骤2。
举例说明
以字符串"AABCBBABC"为例,说明LZ77算法的压缩过程:
- 初始字符串从右往左滑动,直至占满所有buffer区。
- 开始遍历buffer的第一个字符'A',因Dictionary空,未匹配到'A',输出(0,0)A。
- 遍历buffer第一个字符"A",在Dictionary找到"A",未超过buffer黄色长度,往后遍历到编码"AB",Dictionary没有匹配到“AB”字符串,于是只编码"A",输出(1, 1)。
- 匹配buffer区第一个字符’B’,Dictionary内未匹配,输出(0,0)B。
- 匹配buffer区第一个字符’C’,Dictionary内未匹配,输出(0,0)C。
- 匹配buffer区第一个字符’B’,offset('B’与Dictionary中匹配的’B’的距离)=2,length=1,输出(2,1)。
- 匹配buffer区第一个字符’B’,在DICTIONARY匹配到,offset=1,length=1,输出(1,1)。
- 匹配BUFFER第一个字符 ‘A’,在DICTIONARY匹配到,offset=5,length=3,输出(5, 3)。
最终压缩结果为:(0,0)A (1,1) (0,0)B (0,0)C (2,1) (1,1) (5,3)
图解压缩过程
第二阶段:位减少 — Huffman编码
Huffman编码是一种熵编码方法,用于减少数据的位数。其基本思想是为出现频率较高的字符分配较短的编码,为出现频率较低的字符分配较长的编码,从而实现数据压缩。
通过构建Huffman树,可以将原始数据的位数从120bit(15*8)减少到28bit。
范式Huffman树:在普通Huffman树的基础上,只需保存编码位长,利用位长反推编码。
总结
Deflate算法通过LZ77算法实现重复消除,通过Huffman编码实现位减少,从而实现高效的数据压缩。这种两阶段的压缩策略在许多应用场景中都取得了很好的效果。
热门推荐
宝马5系突然熄火的原因及应对方法
为什么高血压要限钠盐,却需要补钾盐,不是禁止饮酒而是限制饮酒
椎间盘突出怎么办?正确运动可以减缓症状与强化身体!
隔水蒸煮带壳鸡蛋:简单易学的完美剥壳技巧
道号“曹仙姑”的北宋女道士,苏轼都曾亲自拜访
躯体化症状究竟是怎么回事?
菲律宾汇率指南:了解菲律宾比索兑换与汇率动态
王楚钦速胜背后藏杀招!暴力美学碰撞27板神球,非洲一哥虽败犹荣
日氢能源车热潮,中国另辟蹊径,未来转型无忧
骨头的正确拼音是什么
红浩克和绿浩克什么关系:漫威宇宙中的亲属与宿敌
艺考舞蹈的十个基本功训练
药师说药丨高血压患者感冒后的用药注意事项
测血压选左手还是右手?8 大测量问题一文理清
测血压选左手还是右手?8 大测量问题一文理清
民国38年历史系统梳理:临时政府、北洋政府、南京政府的发展历程
喉咙痛的快的解决方法
如何有效回应审查意见?——全面指南
《连山易》并未失传,只因后人整编时更换了书名
【非遗】禹的传说
腰椎间盘突出手术后十天可否拆线?专业医生为您详细解答
拆线后的护理措施
法院开庭顺序是怎样的
家庭教育与孩子的积极心态培养
《白洁高义篇》到底讲述了什么?从人物内心的挣扎到社会压力的探讨
高三物理补课教程:从基础到实战的全方位指南
太平天国圣库制度:理想经济模式在乱世的实践与崩溃
这本神奇的书,成全了洪秀全,造就了拜上帝教,制造了太平天国!
坐月餐单〡新手妈妈必学50+款营养食谱〡开刀产与顺产饮食有分别?
航空公司线上值机能选的座位越来越少?规则果真有变化