【发布时间】:2017-01-19 10:36:17
【问题描述】:
假设我们有以下规范的霍夫曼码表。
Symbol Code-length Codeword
A 2 00
B 2 01
C 2 10
D 2 11
现在,我们从输入文件中读取符号并通过查看上表对其进行编码。然而,许多资源说,在规范霍夫曼的情况下,我们不应该发送代码字。相反,每个符号的代码长度就足够了。
如果文本文件包含 ACCDB,我应该将 00 01 10 11 还是 10 10 10 10(对应代码长度的二进制等效项)作为编码比特流传输?如果我错了,请纠正我,我很感激任何解释。
此外,如果这是规范 Huffman 的情况,我们将如何解码该比特流以获取原始符号 ACCDB(在解码器中不使用 Huffman 树)?
【问题讨论】:
-
对问题进行编辑后,这仍然不是前缀代码。 A 是 C 和 D 的前缀。在前缀代码中,任何代码都不能有任何其他代码作为其前缀。
-
现在是不完整的代码。不使用 100 和 111。您可以去掉 C 和 D 的最后一位,使其 10 和 11 成为完整的代码,长度为 2 2 2 2。唯一有效的四符号代码长度是 2 2 2 2 和 1 2 3 3。
标签: algorithm encoding compression huffman-code text-compression