具有查找表的霍夫曼代码

时间:2012-12-10 16:07:13

标签: c++

我已经阅读了一篇关于互联网的文章,并且知道通过遍历从root进行解码的自然方式,但我希望通过查找表更快地完成。

看完之后,我仍然无法得分。

例如:

input:"abcdaabaaabaaa"
code   data
0      a
10     b
110    c
111    d

文章说,由于长度可变,它通过取一些字符串来确定长度 最大代码长度并将其用作索引。

output:"010110111001000010000"
Index    Index(binary)    Code    Bits required
0        000              a       1
1        001              a       1
2        010              a       1
3        011              a       1
4        100              b       2
5        101              b       2
6        110              c       3
7        111              d       3

我的问题是:

  1. due to variable length, it determine the length by taking a bit of string of max code length是什么意思?如何确定长度?

  2. 如何生成查找表以及如何使用它?背后的算法是什么?

1 个答案:

答案 0 :(得分:4)

对于您的示例,最大代码长度为3位。因此,您从流(010)中取出前3位并使用它来索引表。这给出了代码'a'和bits = 1.您从输入流中消耗1位,输出代码并继续。在第二个周围你会得到(101),其索引为'b'和2位等。

要构建表格,请使其大小为1<< max_code_length,并填写详细信息,就好像您将索引解码为霍夫曼代码一样。如果你看一下你的例子,所有以“0”开头的索引都是a,以“10”开头的索引是b,依此类推。