【问题标题】:Hoffman tree Vs, Binary balanced tree霍夫曼树 Vs,二叉平衡树
【发布时间】:2014-02-09 21:18:06
【问题描述】:

给定n个实正数A1,A2....An构建一棵二叉树T如:

  1. 每个数字都是一片叶子。
  2. T 的权重将尽可能小。树的重量等于每片叶子的总和乘以它的高度。

这个问题是在算法和数据结构的测试中给我的。我的简单回答是构建一棵二叉树,使得每个叶子都是 A1 到 An。 T 的权重将是 logn*Ai 的总和。

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

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

如果A1到An都是很小的数字,例如0到1,那么每个叶子的高度将成为计算树权重的主导因素。

不胜感激。

【问题讨论】:

标签: algorithm data-structures binary-tree


【解决方案1】:

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

考虑这个页面上的例子 - "A quick tutorial on generating a huffman tree"。 生成的霍夫曼树的权重为 228,是最优的。

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

【讨论】:

  • 如果数组 A 由非常小的数字组成怎么办?霍夫曼树还成立吗?
  • 我认为树的权重是freq(Ai)*depth(Ai) 的总和,现在我看到权重是Ai*depth(Ai) 的总和。因此,不要使用频率,而是使用数字本身来构建霍夫曼树。因此,小数字比大数字更深,对整体重量的贡献大致相同。为了回答你的问题,小数字不是问题,它们只会降低树的重量。问题在于数字有很大差异 - 这是霍夫曼树最佳解决的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
相关资源
最近更新 更多