【问题标题】:Using Java, how do I get the encoded tree of a Huffman Tree?使用 Java,如何获得 Huffman 树的编码树?
【发布时间】:2020-10-29 20:25:54
【问题描述】:

鉴于构建了一棵树以及它工作所需的所有变量,我只需要了解如何从霍夫曼树中获取编码树。

更具体地说,我需要返回霍夫曼树的字符串编码。没有参数传递给函数。它只是一个 getHuffmanTreeEncoded() 函数,它返回树的编码字符串,我不知道该怎么做。

我没有提供此问题的代码,因为其余部分已经完成,而且很长/对于学校来说...我想我会更好地用文字来理解。

我需要遍历树吗?我需要递归循环吗?我需要传递一个带有 Huffman Tree 字符串编码的字符串变量。假设一切的功能和结构已经存在(树、获取编码测试、优先级队列实现等),我将如何处理。获取 Huffman 树的字符串的一般步骤是什么?

-谢谢

【问题讨论】:

  • 您是否仔细检查了有关编码外观的任何规范?编码树有数百种不同的方法,如果它用于分配,我希望至少对它应该如何编码有一些限制。
  • 是的,有一个规范,但我真的不太担心,我更担心你如何真正穿过树并找到一个值?类似于一个数组,我可以迭代或递归地遍历每个值 [i] 并将其分配给一个变量或比较它或我想要的任何东西。如何遍历/读取树中的值?
  • 啊,现在我明白了这个问题。这个答案有帮助吗:stackoverflow.com/questions/15306452/… ?

标签: java arrays string tree huffman-code


【解决方案1】:

我认为您要问的是:如果我有符号,我如何使用 Huffman 树生成该符号的代码。

你没有。对于消息中的每个符号,这是一件可怕的事情。相反,您要做的是递归遍历整个树一次,然后在每个叶子处,将符号及其代码添加到表中。丢弃树并使用表进行编码。

您甚至不需要这样做,因为您可以忽略将 0 和 1 分配给左右分支的实际代码。但是,该分配完全是任意的,任何其他分配都会给您相同的压缩。您需要从霍夫曼树中获取的唯一信息是每个符号的代码长度,以位为单位。递归遍历树并生成符号表及其代码长度。

然后您可以使用canonical Huffman code 进行编码。

【讨论】:

    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多