我有一个实现霍夫曼编码的代码来编码文本。
给出以下文字
abbccc
我的程序生成下表
a -> 00
b -> 01
c -> 1
所以编码文本(位数组)是
000101111
问题是:我需要将表格与文本一起编码,我不知道建议的方法是什么。
到目前为止我的想法:
你能为我建议一些更灵活但更便宜(内存使用率低)的方法吗?
答案 0 :(得分:2)
Deflate RFC1951将Huffman表存储在压缩数据前面。见3.2.7节。您不需要存储代码(在您的情况下为00,01,1),但是它们的长度(即2,2,1)。第3.2.2节描述了在解压缩时如何将这些长度转换回代码。该表由您将拥有的所有符号的一系列长度来描述,在您的小示例中,它将类似于0,0,0,...,2,2,1,.... 0。零表示文件中没有出现这些符号,但长度为2,2,1的a,b,c除外。为了使这个长度表紧凑,你可以做长度编码。在Deflate(第3.2.7节)中,长度符号18(n)对n个0长度的序列进行编码。接下来的问题是如何编码长度符号'18'?您可以使用5位代码表示长度符号0到18,以使其更简单。或者你也可以对霍夫曼进行编码,例如使用0-7位代码,这就是Deflate所做的。