霍夫曼树Vs,二进制平衡树

时间:2014-02-09 21:18:07

标签: algorithm data-structures binary-tree

鉴于 n 实数正数 A1,A2 .... 构建二叉树 T ,例如:

  1. 每个号码都是一片叶子。
  2. T 的重量将尽可能小。树的重量等于每片叶子的总和乘以它的高度。
  3. 这个问题是在算法和数据结构测试期间给我的。我的回答是简单的建立一个二叉树,每个叶子是A1到An。 T 的权重将是 logn * Ai的总和。

    我没有得到这个答案的分数。获得满分的答案是按频率对数字进行排序并构建霍夫曼树。

    我的问题是为什么我的答案被忽略了?

    如果A1到An都是非常小的数字,例如从0到1,则每个叶子的高度将成为计算树重量的重要因素。

    帮助会很有意义。

1 个答案:

答案 0 :(得分:3)

在原始数组A中,可能会有一些元素比其他元素更多出现。您希望以某种方式构造树,树中最常见的元素比有些稀有元素高。

考虑此页面上的示例 - "A quick tutorial on generating a huffman tree"。 生成的霍夫曼树具有权重228,这是最佳的。

对于同一组,您可以得到的最佳完美平衡树的重量为241(深度为2的5和6,深度为3的其他元素),最差的294(切换5和6与1和2)。 你的解决方案会在这些之间找到一些东西,而不是最佳的。