GZIP压缩原理分析(23)——第五章 Deflate算法详解(五14) 动态哈夫曼编码分析(03) LZ77过程(02)

*匹配串由几个字符构成?

对于字符串

“As mentioned above,there are many kinds of wireless systems other than cellular.”,

先来看第一个问题。Deflate压缩中有规定,先行缓冲区中的字符串最少要由3个连续的字符构成。放到这个例子里,字符串“re”是不行的,至少得是“re (这里有空格)”。也就是说,当先行缓冲区中的字符串至少由3个连续的字符组成并且在查找缓冲区中找到了匹配,此时先行缓冲区中的这个字符串才能用“长度+距离”对儿替换。长度距离对儿是个二元组,要由两个数组成。如果对单个字符用长度距离对儿替换,那还不如不替换;如果对两个连续字符用长度距离对儿替换,那是否替换又有什么关系,反正替换前后都要用两个数(字符其实也是个数)。所以,能够替换的前提就是字符串至少要由3个位于先行缓冲区中的连续字符组成,而且还必须以先行缓冲区中第一个字节为开始。

压缩过程是逐字节依次进行的,字符串的组成过程举例如下,有字符串“abcdefghijklm”。当先行缓冲区第一个字符为“a”时,以它为起始,由连续的三个字符组成的字符串就是“abc”;接着当先行缓冲区第一个字符为“b”时,对应的字符串是“bcd”;接着当先行缓冲区第一个字符为“c”时,对应的字符串就是“cde”……当先行缓冲区的第一个字符是“k”时,对应的字符串就是“klm”;以上这些字符串都有资格在查找缓冲区中寻找匹配串。当先行缓冲区第一个字节走到“l”的位置时,由于连续字符数不够三个,所以没资格在查找缓冲区中寻找匹配串,“m”就更别提了。当然,有的字符可能没有机会当先行缓冲区的第一个字符,因为它所在的字符串很可能已经被长度距离对儿替换掉了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值