c – 如何快速解码huffman代码?

前端之家收集整理的这篇文章主要介绍了c – 如何快速解码huffman代码?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经实现了 a simple compressor在Windows下使用纯huffman代码.但是我不太了解如何快速解码压缩文件,我的坏算法是:

枚举代​​码表中的所有huffman代码,然后将其与压缩文件中的位进行比较.结果是可怕的结果:解压缩3MB文件需要6个小时.

你能提供一个更有效的算法吗?我应该使用哈希还是什么?

更新:
根据我的朋友林的建议,我已经实施了the decoder的状态表.我认为这种方法应该比travesal huffman树更好,6s内有3MB.

谢谢.

解决方法

优化二叉树方法的一种方法是使用查找表.您安排表,以便您可以直接查找特定的编码位模式,从而允许任何代码的最大可能的位宽.

由于大多数代码不使用完整的最大宽度,它们被包含在表中的多个位置 – 每个未使用位组合的一个位置.该表指示从输入以及解码输出中丢弃多少位.

如果最长的代码太长,那么表是不切实际的,妥协是使用较小的固定宽度下标查找树.例如,您可以使用256项表来处理一个字节.如果输入代码超过8位,则表项表示解码不完整,并指示您处理下一个最多8位的表.更大的表交易记忆速度 – 256项可能太小了.

我相信这种一般方法被称为“前缀表”,而且是BobMcGees引用的代码正在做的.可能的区别是一些压缩算法需要在解压缩期间更新前缀表 – 这对于简单的霍夫曼来说不是必需的. IIRC,我首先在一本关于位图的图形文件格式的书中看到它,其中包括GIF,在专利恐慌之前的一段时间.

应该很容易从二叉树模型预先计算完整的查找表,散列表等价物或小树.二叉树仍然是代码的关键代表 – 这个查找表只是优化.

猜你在找的C&C++相关文章