繁体   English   中英

如何有效地解压缩霍夫曼编码文件

[英]How to efficiently decompress huffman coded file

我发现了很多问题,但是其中的一些解释很难理解,我无法完全理解如何有效地解压缩文件的概念。 我发现了以下相关问题: 带查找表的霍夫曼代码 如何快速解码霍夫曼代码?

但是我不明白这个解释。 我知道如何定期对霍夫曼树进行编码和解码。 现在,在我的压缩程序中,我可以将以下任何信息写入文件符号霍夫曼代码(无符号长)霍夫曼代码长度

我计划要做的是获取一个文本文件,将其分离为小文本文件,然后分别压缩,然后通过将所有小压缩文件及其各自的查找表(不知道如何执行此操作)发送给该文件,以对该文件进行解压缩Nvidia GPU尝试使用某种查找表并行解压缩文件。

我有3个问题:应该将哪些信息写入表头的文件中以构成查找表? 如何从文件重新创建该表? 如何使用它快速解码霍夫曼编码的文件?

除非这是一个有教义的练习,否则不要自己写。 使用zliblz4或其他几个免费压缩/解压缩库中的任何一个,它们经过比您能做的任何事情都经过更好的测试。

您只在谈论霍夫曼编码,这表示您将仅获得可用压缩的一小部分。 提到的库中的大多数压缩来自匹配的字符串。 查找“ LZ77”。

至于有效的霍夫曼解码,您可以看看zlib的inflate是如何做到的。 它为代码的最高9位创建一个查找表。 该表中的每个条目都具有该代码的符号和位数(小于或等于9),或者如果提供的9位是较长代码的前缀,则该条目具有指向另一个表的指针以解析该表。代码的其余部分以及该辅助表所需的位数。 (这些辅助表有多个。)如果代码长度小于9,则同一符号有多个条目。 实际上,一个n位代码有2个9-n个多个条目。

因此,要进行解码,您需要从输入中获取9位,并从表中获取条目。 如果它是一个符号,则从流中删除为代码指示的位数,并发出该符号。 如果它是指向辅助表的指针,则从流中删除九位,获取表指示的位数,然后在该表中查找。 现在,您肯定会发出一个符号,以及要从流中删除的剩余位数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM