【问题标题】:Canonical Huffman Encoder : Contents of Encoded Bitstream规范霍夫曼编码器:编码比特流的内容
【发布时间】: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


【解决方案1】:

这不是规范的霍夫曼代码表,也不是霍夫曼代码,也不是前缀代码。代码长度 1、2、2、3 超额订阅了可用位。 1、2、2是完整的编码,不允许再编码符号。

1、2、3、3 是完整且未超额订阅的代码,在这种情况下,代码的示例为 0、10、110、111。您可以看到这些代码可以被唯一地解码,读取它们从左到右。

【讨论】:

  • 谢谢马克。好的,我了解了代码和可用位。但是,根据您之前在另一个线程中的解释,我们不应该将代码字发送到解码器,对吧?那么,您能告诉我上述示例的编码比特流是什么样的吗?在常规霍夫曼的情况下,它只是相应的代码字。我的另一个问题是,如果我们不应该在解码器中使用霍夫曼树,解码器将如何推断代码字(或代码长度)~符号信息?谢谢。
  • 还有两个问题,所以你应该发布两个新问题。
  • 好的,确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多