我怎么知道我的霍夫曼树是否正确?

问题描述

提出的问题:

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

所以我创建了这棵树:

depth 5 tree

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

解决方法

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

three trees

对于其中的每一个,您可以任意选择在每个长度上放置哪个符号。对于前两棵树,2 必须是符号 24,但其余 8 个符号可以按您喜欢的方式拆分为每组 4 个。对于这两个树中的每一个,都有 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