提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
无损数据压缩(Lossless Data Compression)是指使用压缩后的数据进行重构(或者叫做还原、解压缩),重构后的数据与原来的数据完全相同,但通常压缩比小于有损数据压缩的压缩比定义与特点无损压缩用于要求重构的信号与原始信号完全一致的场合。也就是说数据经过压缩后信息不受损失,还能完全恢复到压缩前的原样。参考文章连接https://blog.csdn.net/qq_34254642/article/details/103651815
一、LZSS是什么?
LZSS 是一种无损数据压缩算法,其压缩算法的核心为用已经出现过的字符串代替重复的部分,编码器的输出仅仅是指向早期出现过的字符串指针。LZSS由LZ77改进而来,又称“滑动窗口压缩”,该算法将一个虚拟的,可以跟随压缩进程滑动的窗口作为词典,要压缩的字符串如果在该窗口中出现,则输出其出现位置和长度,没出现则原样输出字符。
二、具体介绍
1.编码步骤
LZSS编码算法的具体执行步骤如下:
1.把编码位置置于输入数据流的开始位置。
2.在前向缓冲器中查找窗口中最长的匹配串
①Pointer :=匹配串指针。
②Length :=匹配串长度。
3.判断匹配串长度Length是否大于等于最小匹配串长度(MIN_LENGTH) ,
如果“是”:输出指针,然后把编码位置向前移动Length个字符。
如果“否”:输出前向缓冲存储器中的第1个字符,然后把编码位置向前移动一个字符。
4.如果前向缓冲器不是空的,就返回到步骤2
2.编码示例
位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
字符 | A | A | B | B | C | B | B | A | A | B | C |
步骤 | 位置 | 匹配串 | 输出 |
---|---|---|---|
1 | 1 | - | A |
2 | 2 | A | A |
3 | 3 | - | B |
4 | 4 | B | B |
5 | 5 | - | C |
6 | 6 | B B | (3,2) |
7 | 8 | A A B | (7,3) |
8 | 11 | C | C |
总结
LZ77通过输出真实字符解决了在窗口中出现没有匹配串的问题,但这个解决方案包含有冗余信息。冗余信息表现在两个方面,一是空指针,二是编码器可能输出额外的字符,这种字符可能包含在下一个匹配串中。LZSS算法以比较有效的方法解决这个问题,它的思想是如果匹配串的长度比指针本身的长度长就输出指针,否则就输出真实字符。由于输出的压缩数据流中包含有指针和字符本身,为了区分它们就需要有额外的标志位,即ID位。