需要一些帮助来了解DEFLATE编码的工作原理。我知道这是LZSS算法和霍夫曼编码的结合。
所以让编码例如“Deflate late”。参数:[搜索缓冲区:8kb和前瞻缓冲区4kb]嗯,LZSS算法的输出是“Deflate< 5,4>”下一步使用静态霍夫曼编码来减少冗余。这是我的问题,我不知道我应该如何编码这对< 5,4>与霍夫曼。
D 000
f 001
l 010
a 011
t 100
_ 101
e 11
很好,根据这个表,字符串“Deflate”被写为000 11 001 010 011 100 11 101.下一步是编码对(5,4)。根据“数据压缩 - 完整参考”一书的长度为4的固定前缀代码为258,后面是距离为5的固定前缀代码(代码4 + 1额外位)。
可以概括为:
长度4 - > 258 - > 0000010
距离5 - > 4 + 1额外位 - > 00100 | 0
因此,编码的字符串被写为[header:1 01] 000 11 001 010 011 100 11 101 0000010 001000 [block-of-block:0000000],但是如果我创建一个huffman树,它不是静态的哈夫曼,对吧?
美好的一天
答案 0 :(得分:12)
D 000
f 001
l 010
a 011
t 100
_ 101
e 11
不是Deflate静态代码。静态文字/长度代码均为7,8或9位,距离代码均为5位。你问过静态代码。
'Deflate late'以静态deflate格式编码为文字'Deflate',长度为4,距离5匹配为十六进制:
73 49 4d cb 49 2c 49 55 00 11 00
分解如下(首先从每个字节的最低有效部分读取位):
011 - 01 means fixed code, 1 means last block
00101110 - D
10101001 - e
01101001 - f
00111001 - l
10001001 - a
00100101 - t
10101001 - e
00001010 - space
0100000 - length 4
00100 - distance 5 or 6 depending on one extra bit
0 - extra bit -> distance 5
0000000 - end code
0 - fill bit to byte boundary