如何解码来自霍夫曼编码比特流的消息?

时间:2011-02-13 18:58:20

标签: decoding huffman-code

如何解码来自霍夫曼编码比特流的消息? 我不清楚霍夫曼算法的概念。

据我了解,假设我收到一条短信“我的名字是XYZ”。

然后编码过程就是这样的: 1.计算字符的频率。 2.按值对频率进行排序。 3.构建一棵树。 4.通过将左边缘视为0并将右边缘视为1来遍历树,以到达预期的消息字符。 5.连接代码以找到比特流。

现在问题是,如何从编码比特流中找到原始消息?

我认为我们需要再次构建霍夫曼树。

但是如何从比特流中构造霍夫曼树呢?

2 个答案:

答案 0 :(得分:2)

没有原始树就无法解码消息。因此,发送方必须将其包含在消息中(如果长消息带有开销很小)或双方在发送消息之前同意树。然后进程是相反的:你从流和遍历树中逐位读取。一旦你击中叶子然后发出角色。

答案 1 :(得分:0)

有两种选择。一种是使用固定的霍夫曼树 - 例如,如果你编码正常的英文文本,字符的相对频率通常足够接近常数,你可以做得相当合理,只是让发送者和接收者事先达成协议他们两个都会使用它们。

对于你所描述的双通道霍夫曼算法,你几乎不愿意将树(以某种形式)与数据一起传输。

您还可以使用动态霍夫曼树,您可以在其中(例如)按照上面第一个选项中所述的树开始,但在处理数据时,发射器和接收器都会调整树以适应观察到的频率。唯一的技巧是每个字符必须在调整之前使用树进行编码,然后进行调整,然后处理下一个字符。这样接收端可以与发送端保持同步。