当我使用Huffman贪婪算法构造二叉树时,如果所有四个字母都是同样可能的话,我得到以下内容:
问题是,我的程序看到00和01仅为0和1.我应该将代码长度从0(零)限制为1(一)吗?应该使用什么数据类型来存储霍夫曼代码或其各个位?
答案 0 :(得分:1)
如果你的“程序看到00和01仅为0和1”,那么你的程序就有bug。
对于四个等概率符号,代码确实是00,01,10和11.这意味着您需要在解码时查找所有这些位。解码时,先拉动左边的位。所以你得到一个0.这意味着代码是00或01.然后你拉下一位。它是1.所以现在你有完整的代码01.你发出相应的符号,然后重新开始。
更容易看到概率不相等且代码长度不同的更典型情况。请考虑以下代码:
a - 0
b - 10
c - 110
d - 111
要解码,请开始从流中提取位。第一位是1.现在你知道它必须是a,b,c或d。现在你拉另一个1.你把它降到c或d。你拉0,所以现在你知道它的d。你从下一位开始。
在开始拉动位并缩小选择范围之前,您不知道代码的长度。解码后,您将知道代码的长度。