我发现了很多问题,但是有些解释很难理解,我无法完全理解如何有效地解压缩文件。 我发现了以下相关问题: Huffman code with lookup table How to decode huffman code quickly?
但我不明白这个解释。我知道如何定期编码和解码霍夫曼树。现在在我的压缩程序中,我可以将以下任何信息写入文件 符号 霍夫曼代码(unsigned long) 霍夫曼代码长度
我打算做的是获取一个文本文件,将其分成小文本文件并单独压缩,然后通过发送所有小的压缩文件及其各自的查找表来解压缩该文件(不知道如何做这部分)到Nvidia GPU尝试使用某种查找表并行解压缩文件。
我有3个问题: 我应该在标题中写入哪些信息来构建查找表? 如何从文件重新创建此表? 如何使用它快速解码霍夫曼编码文件?
答案 0 :(得分:1)
不要打扰自己写,除非这是一个教学练习。使用zlib,lz4或其他任何其他免费压缩/解压缩库,其测试结果远比您能够做的任何事情都要好。
您只是在讨论霍夫曼编码,表明您只能获得一小部分可用压缩。提到的库中的大多数压缩来自匹配的字符串。查看“LZ77”。
至于高效的霍夫曼解码,你可以看看zlib的膨胀是如何做到的。它为代码中最重要的9位创建了一个查找表。表中的每个条目都有一个符号和该代码的位数(小于或等于9),或者如果提供的9位是较长代码的前缀,则该条目具有指向另一个表的指针以解析其余代码和该辅助表所需的位数。 (这些辅助表中有几个。)如果代码长度小于9,则同一符号有多个条目。实际上,对于n位代码,有2个 9-n 多个条目。
因此要解码,您将从输入中获取9位并从表中获取条目。如果它是符号,则从流中删除为代码指示的位数并发出符号。如果它是指向辅助表的指针,则从流中删除9位,获取表所指示的位数,然后在那里查找。现在你肯定会得到一个要发出的符号,以及要从流中删除的剩余位数。