给定n个实数正数A1,A2….构建一个二叉树T,例如:
每个数字都是一片叶子。
T的重量应尽可能小树的重量等于每片叶子的总和乘以它的高度。
这个问题是在算法和数据结构的测试中给我的简而言之,我的答案是建立一个二叉树,使每一片叶子都是1到1。T的重量是logn*Ai的和。
我没有得到这个答案的分数得到满分的答案是按频率对数字进行排序,并建立一个霍夫曼树。
我的问题是为什么我的答案被忽略了?
如果a1到an都是非常小的数字,例如从0到1,那么每个叶子的高度将成为计算树的重量的主要因素。
会得到帮助的。
最佳答案
在原始数组A
中,可能有一些元素的出现次数比其他元素多。您希望以某种方式构造树,即树中最常见的元素比有些罕见的元素高。
请考虑本页上的示例-"A quick tutorial on generating a huffman tree"。
生成的哈夫曼树的权重为228,这是最优的。
对于同一个集合,可以得到的最佳完全平衡树的权重为241(深度2为5和6,深度3为其他元素),最差的为294(1和2为5和6切换)。
你的解决方案会在两者之间找到一些东西,而不是最佳的。