用文本编码 Huffman table
Encode Huffman table with text
我有一个代码实现了霍夫曼编码来对文本进行编码。
给定以下文本
abbccc
我的程序生成以下内容table
a -> 00
b -> 01
c -> 1
所以编码后的文本(位数组)是
000101111
问题是:我需要将 table 与文本一起编码,但我不知道对此推荐的方法是什么。
到目前为止我的想法:
- 第一个字节是table
中键值对的个数N
- 接下来的 N*2 个字节是键值对本身(一个字节为键,一个字节为值)
- 其余位是编码文本本身
你能为我推荐一些更灵活但成本低廉(内存使用率低)的方法吗?
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 位代码。
我有一个代码实现了霍夫曼编码来对文本进行编码。
给定以下文本
abbccc
我的程序生成以下内容table
a -> 00
b -> 01
c -> 1
所以编码后的文本(位数组)是
000101111
问题是:我需要将 table 与文本一起编码,但我不知道对此推荐的方法是什么。
到目前为止我的想法:
- 第一个字节是table 中键值对的个数N
- 接下来的 N*2 个字节是键值对本身(一个字节为键,一个字节为值)
- 其余位是编码文本本身
你能为我推荐一些更灵活但成本低廉(内存使用率低)的方法吗?
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 位代码。