微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我已经实现了 a simple compressor在Windows下使用纯huffman代码.但是我不太了解如何快速解码压缩文件,我的坏算法是:

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

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

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

谢谢.

解决方法

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

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

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

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

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

原文地址:https://www.jb51.cc/c/115675.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐