用文本编码 Huffman table

Encode Huffman table with text

我有一个代码实现了霍夫曼编码来对文本进行编码。

给定以下文本

abbccc

我的程序生成以下内容table

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

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

000101111

问题是:我需要将 table 与文本一起编码,但我不知道对此推​​荐的方法是什么。

到目前为止我的想法:

你能为我推荐一些更灵活但成本低廉(内存使用率低)的方法吗?

Deflate RFC1951 将霍夫曼 table 存储在压缩数据的前面。请参阅第 3.2.7 节。您不需要存储代码(在您的情况下为 00,01,1),而是存储它们的长度(即 2,2,1)。 3.2.2 节描述了在解压缩时如何将这些长度转换回代码。 table 由您将拥有的所有符号的长度序列描述,在您的小示例中,它将类似于 0,0,0,...,2,2,1,.... 0。零表示这些符号没有出现在文件中,除了 a、b、c 的长度为 2、2、1。为了使这个 table 的长度紧凑,你可以进行 运行 长度编码。在 Deflate(第 3.2.7 节)中,长度符号 18(n) 对长度为 0 的序列进行 n 次编码。下一个问题是如何对长度符号'18'进行编码?可以用5位码来表示0到18的长度符号,这样更简单。或者您也可以对它们进行霍夫曼编码,例如使用 Deflate 所做的 0-7 位代码。