Few*_*ewG 3 zip encoding deflate huffman-code
需要一些帮助才能理解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树,它不再是静态的huffman,对?
美好的一天
Mar*_*ler 13
D 000
f 001
l 010
a 011
t 100
_ 101
e 11
Run Code Online (Sandbox Code Playgroud)
不是Deflate静态代码.静态文字/长度代码均为7,8或9位,距离代码均为5位.你问过静态代码.
'deflate late'以静态deflate格式编码为文字'Deflate',长度为4,距离5匹配为十六进制:
73 49 4d cb 49 2c 49 55 00 11 00
Run Code Online (Sandbox Code Playgroud)
这可以分解如下(首先从每个字节的最低有效部分读取位):
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
Run Code Online (Sandbox Code Playgroud)