【发布时间】:2013-06-28 05:55:56
【问题描述】:
需要一些帮助来了解 DEFLATE 编码的工作原理。我知道这是LZSS算法和霍夫曼编码的结合。
所以让我们编码例如“Deflate Late”。 Params: [Search buffer: 8kb and Look-ahead buffer 4kb] 那么LZSS算法的输出是“Deflate” 下一步使用静态huffman编码来减少冗余。这是我的问题,我不知道我应该如何用霍夫曼对这对 进行编码。
[已编辑]
D 000
f 001
l 010
011
t 100
_ 101
11
好吧,根据这个表,字符串“Deflate”写成 000 11 001 010 011 100 11 101。下一步让我们对 (5, 4) 对进行编码。 《Data Compression - The Complete Reference》一书中长度为4的固定前缀码为258,后跟距离为5的固定前缀码(Code 4 + 1 Extra bit)。
可以概括为:
长度 4 -> 258 -> 0000010
距离 5 -> 4 + 1 个额外位 -> 00100|0
所以,编码的字符串写成 [header: 1 01] 000 11 001 010 011 100 11 101 0000010 001000 [end-of-block: 0000000],但是如果我创建一个霍夫曼树,它不是静态的哈夫曼了,对吧?
美好的一天
【问题讨论】:
-
既然您没有询问如何编码“Deflate”,那么您必须已经知道如何为这些文字发出霍夫曼代码。您执行完全相同的操作,即发出长度 4 而不是文字,后跟距离代码 5。
-
好吧,根据这个表,字符串“Deflate”写成 000 11 001 010 011 100 11 101。下一步让我们对 (5, 4) 对进行编码。 《数据压缩-完整参考》一书中长度为4的固定前缀码为258,后跟距离为5的固定前缀码。【概括为】:长度4 -> 258 -> 0000010 [7位]距离 5 -> 4 + 1 个额外位 -> 00100|0 因此,编码字符串写为 [header: 1 01] 000 11 001 010 011 100 11 101 0000010 001000 [end-of-block: 0000000],但如果我创建了一棵霍夫曼树,它不是静态的霍夫曼树,对吧?
标签: encoding zip huffman-code deflate