可怜的勒芒霍夫曼压缩

时间:2012-02-08 09:30:35

标签: compression huffman-code

我试图更好地理解霍夫曼解码器的工作原理。我有一个代码表,但由于二进制字符串的模糊性,我很难理解解码器的工作方式。

(我在大学的最后一年准备中学习这个)

我的桌子:

Data  Hcode
0,     0
1,     1
2,     10
3,     11
17,    100
18,    101
19,    110
29,    111

如果我有像010011这样的霍夫曼代码字符串,我可以返回许多不同的数据组合,那么我如何辨别呢?

我理解BST表示中的霍夫曼逻辑,并且您遵循给定叶子的路径,该路径类似于(0-255(ascii)之间的给定值的代码)但我仍然不知道如何区分返回数据:0,1,0或数据:0,17

我真的必须在数据0和1上强制执行2位代码吗? (00和01)

我希望我能解释最好的XD

如果你想知道我是如何生成表的 - 你会杀了我因为我没有使用树逻辑来生成它。虽然我在频率上对数据(随机字节)进行了排序 - 我通过将元素位置编号转换为二进制来生成Hcodes(为什么我将这个帖子称为穷人哈夫曼)。

非常感谢您的任何建议。

2 个答案:

答案 0 :(得分:3)

代码表错误。霍夫曼颂应该是prefix free。这是必要的,以便在之后解码它们而没有含糊之处。

如果您使用二叉树来创建代码,这将自动确保“前缀可用性”。请参阅:http://en.wikipedia.org/wiki/Huffman_coding

现在,我要杀了你......;)

答案 1 :(得分:2)

不仅代码表错误,代码长度也错误。如果您有两个一位代码,则您已经用完了所有代码空间,并且没有其他代码。你所展示的不仅是霍夫曼代码而且不是前缀代码 - 它实际上根本不是代码。