5

我在互联网上读过一篇文章,知道从根目录遍历解码的自然方式,但我想用查找表更快地做到这一点。

读完后,我仍然无法获得积分。

前任:

输入:“abcdaabaaabaaa”
代码数据
0个
10 乙
110摄氏度
111天

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

输出:“010110111001000010000”
索引索引(二进制)代码位需要
0 000 一 1
1 001 一 1
2 010 一 1
3 011 一 1
4 100 乙 2
5 101 乙 2
6 110 c 3
7 111 天 3

我的问题是:

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

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

4

1 回答 1

6

对于您的示例,最大代码长度为 3 位。因此,您从流 (010) 中获取前 3 位并使用它来索引表。这给出了代码“a”和位 = 1。您从输入流中消耗 1 位,输出代码,然后继续。在第二次运行时,您将获得 (101),其索引为 'b' 和 2 位等。

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

于 2012-12-10T16:13:46.060 回答