【发布时间】:2012-05-15 09:31:30
【问题描述】:
我正在开发一个文件压缩程序。我们目前正在实施 .ZIP 存档器标准,以便在生成压缩的 .ZIP 存档器时,任何其他有信誉的压缩器(例如 7zip)都可以完美地理解/解压缩它。
我们现在正在开发基于RFC 1951的DEFLATE算法
我们有 LZ77 的变体和带有固定代码的 Huffman 编码,可以完美运行并与 RFC 兼容,因此可以使用 Literal-Length + Distance 值。
在动态霍夫曼编码中,我目前能够从一些压缩数据(通过另一个可靠的压缩器压缩)中提取霍夫曼树,但是当开始解压缩真实数据时,我得到的值不正确。
可能我以错误的方式阅读树木。
我还没有具体找到有人准确解释这些树的值存储在压缩数据上的方式的任何地方。
我假设编码数据遵循相同的文字长度值 (0~285) + 距离 (0~30) 以及每个文字/距离对应的额外位,如 RFC 中所解释的,与固定霍夫曼编码的方式相同。
在固定霍夫曼编码中存储的方式是 霍夫曼代码 与 最重要位在最低的代码一起存储内存中的重要位。这样,您就可以逐位向下浏览编码树。
额外的位霍夫曼代码以另一种方式存储。
动态霍夫曼编码是否以相同的方式存储它们?
有什么我遗漏的或者我应该注意的吗?
【问题讨论】:
标签: dynamic encoding compression deflate huffman-code