【问题标题】:How do I know if my huffman tree is correct?我怎么知道我的霍夫曼树是否正确?
【发布时间】:2021-05-25 11:09:12
【问题描述】:

被问到的问题:

创建一个霍夫曼树并为以下数字编码:24、55、13、 67、88、36、17、61、24、76

所以我创建了这棵树:

但是由于可能有多个树,我怎么知道我的树是否正确,因为有多个元素具有相同的频率?

【问题讨论】:

    标签: encoding compression huffman-code


    【解决方案1】:

    将“数字”解释为符号而不是频率,然后我们得到一组频率 {1, 1, 1, 1, 1, 1, 1, 1, 2}。由于在 Huffman 算法的某些步骤中有不止一种选择,因此存在不止一种可能的结果拓扑。以下是您可以获得的三种拓扑不同的树,具体取决于您做出的选择:

    对于其中的每一个,您可以任意选择在每个长度上放置哪些符号。对于前两棵树,2 必须是符号 24,但剩余的八个符号可以按照您的喜好在每组四个中拆分。对于这两个树中的每一个,都有 70 个可能的唯一长度分配。对于第三棵树,2 必须是符号 24,但其余符号可以根据需要分成 2 组和 6 组,有 28 种可能的选择。

    做出这些选择后,您现在可以为每个叶子分配代码,在每个分支上,您可以独立且任意地将 0 分配给左分支,将 1 分配给右分支, 1 给左分支,右分支为 0。对于每个树和符号长度分配,这给出了 256 种可能的代码分配。

    总而言之,霍夫曼算法可以产生 43,008 种可能的代码。 所有这些选择都是正确的。它们都会在消息中产生相同的最佳位数 (32)。

    这里是another example of multiple Huffman tree topologies for a single set of frequencies

    【讨论】:

    • 好吧,我想我误解了这些问题。 “最短路径具有最低频率之一,24。频率为 88 的叶子应该具有到根的最短路径”井 24 是给定集合中唯一重复两次的数字,因此它应该具有最高频率,2。另一方面,88 没有重复,因此它的频率与所有其他元素一样为 1。我是否以某种方式误解了这里的问题?
    • 也许我误解了。我将数字视为符号的频率,而不是符号本身。你是说你可以用 a、b、c、d、e、f、g、h 和 i 替换数字吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多