Data structures 用文本编码哈夫曼表

Data structures 用文本编码哈夫曼表,data-structures,language-agnostic,huffman-code,Data Structures,Language Agnostic,Huffman Code,我有一个实现哈夫曼编码的代码来编码文本 鉴于以下案文 abbccc 我的程序生成下表 a -> 00 b -> 01 c -> 1 因此编码文本(位数组)是 问题是:我需要将表格与文本一起编码,我不知道推荐的方法是什么 到目前为止,我的想法是: 第一个字节是表中键值对的数目N 以下N*2个字节是键值对本身(一个字节表示键,一个字节表示值) 剩余的位是编码文本本身 您能为我推荐一些更灵活、更便宜(内存使用率低)的方法吗?Deflate RFC1951将哈夫曼表存储在压缩数据

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

鉴于以下案文

abbccc

我的程序生成下表

a -> 00
b -> 01
c -> 1
因此编码文本(位数组)是

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

到目前为止,我的想法是:

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

您能为我推荐一些更灵活、更便宜(内存使用率低)的方法吗?

Deflate RFC1951将哈夫曼表存储在压缩数据前面。见第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)对0个长度的序列编码n次。下一个问题是如何对长度符号“18”进行编码?您可以使用5位代码来表示长度符号0到18,以使其更简单。或者您也可以对它们进行哈夫曼编码,例如使用0-7位代码,这就是Deflate所做的。

我非常确定Deflate算法使用哈夫曼编码。。你可以看看他们是怎么做的。警告:该文档有点密集,难以理解。我还没有理解它。从我几年前的记忆中,如果您按照特定的过程来构建哈夫曼树,然后以某种排序顺序存储KVP,那么有一种独特的表示形式,这使得存储表非常紧凑。如果您想要以尽可能小的大小存储表(您没有真正说明“便宜”是什么意思),那么请查找规范的哈夫曼代码。首先。我想这就是@ithenoob正在讨论的内容?@Gene:我特别指的是DEFLATE管理字典的方式,我相信它也以某种神秘的方式被压缩。然而,你链接到的维基百科页面看起来更有前景,因为它更具可读性,并且明确表示将讨论紧凑的哈夫曼表示。@Gene,“廉价”指的是内存。我对我的问题进行了编辑以使其更清楚。谢谢你指出这一点。@ithenoob,我会尽快阅读此规范,谢谢。
000101111