带有查找表的霍夫曼代码

Jas*_*son 4 c++

我已经阅读了 Internet 上的一篇文章,并且知道从根遍历进行解码的自然方式,但我想使用查找表更快地进行解码。

看完了,还是拿不到分。

前任:

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

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

输出:“010110111001000010000”
索引 索引(二进制) 需要的代码位
0 000 1
1 001 一 1
2 010 一 1
3 011 一 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. 如何生成查找表以及如何使用它?背后的算法是什么?

Jas*_*onD 5

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

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