用文本编码霍夫曼表

时间:2017-06-03 02:39:17

标签: data-structures language-agnostic huffman-code

我有一个实现霍夫曼编码的代码来编码文本。

给出以下文字

  

abbccc

我的程序生成下表

a -> 00
b -> 01
c -> 1

所以编码文本(位数组)是

000101111

问题是:我需要将表格与文本一起编码,我不知道建议的方法是什么。

到目前为止我的想法:

  • 第一个字节是表
  • 中键值对的数量N.
  • 以下N * 2个字节是键值对本身(键一个字节,值一个字节)
  • 剩余位是编码文本本身

你能为我建议一些更灵活但更便宜(内存使用率低)的方法吗?

1 个答案:

答案 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所做的。