0

我有树,每个字节的编码值,编码和解码表,以及我在编码文件的二进制文件中的编码文件,我有两个问题,我应该存储什么,只有解码表和编码文件应该够了吧?我应该在什么类型的文件中存储解码表和我的编码文件?我正在使用java。

4

1 回答 1

1

如果生成规范树,则只需按未编码值的顺序存储每个字节的代码长度。由于霍夫曼码的最大长度是不同的未编码值的数量,而最小长度为 1,因此每个长度都适合单个字节。(gzip 库还对长度进行了编码,以进一步减少开销。)

假设代码是规范的,有一个简单的算法可以从长度列表生成完整的树。

实际上,至少有两种可能的规范编码样式。在这两种情况下,给定长度的代码与原始未编码字节具有相同的顺序。在维基百科描述的规范代码中,较短的代码在较长的代码之前(即最短的代码全为零。但更常见的规范形式将较长的代码放在开头,因此最长的代码全为零。维基百科的文章包括生成其规范编码形式的算法;另一种形式同样简单。

最长代码优先形式的优点是您可以证明只有任何代码的最后一位可以是非零的(是字母表大小);换句话说,每个代码都由一定数量的零位组成,后跟最多一个混合零和一的“字节”。此属性有助于加快解码速度。ceil(log2n)n

于 2013-04-14T19:10:15.833 回答