我在DS课程的一个家庭作业解决方案中遇到了一个很好的问题。
以下哪一项(for large n
)为Huffman Tree
创建了最高的高度。以下选项中每个序列的元素显示the frequencies of character in input text
并且未显示字符。
1) sequence of n equal numbers
2) sequence of n consecutive Fibonacci numbers.
3) sequence <1,2,3,...,n>
4) sequence <1^2,2^2,3^2,...,n^2>
任何人都可以说,为什么这个解决方案选择(2)?感谢任何人。
答案 0 :(得分:3)
让我们在这里分析各种选项。
N个相等数字的序列表示将使用底部叶节点处的实际符号创建平衡树。
序列1-N具有以下属性:当您开始对两个最低元素进行分组时,它们的总和将快速超过其他元素,这是一个示例:
正如你所看到的,4 + 5和7 + 8的组本身并没有对树的高度做出贡献。
在将两个3节点分组为6之后,节点4和5成为下一个节点,这意味着形成的每个新组都不会对其高度做出贡献。大多数会,但不是全部,这是重要的事实。
使用正方形的序列(注意:问题中第三个序列中的正方形,1^2, 2^2, 3^2, 4^2, ..., N^2
,而不是方形图元素)与1-N序列的行为有些相同,有些时候是其他元素将使用刚刚形成的那个,这将减少高度:
正如你在这里看到的那样,36 + 49也是如此,它对树的高度没有贡献。
然而,斐波那契序列不同。当您对两个最低节点进行分组时,它们的总和最多会推翻下一个项目但不会超过其中一个,这意味着正在形成的每个新组也将在下一个项目中使用,以便每个新组形成将有助于树的高度。这与其他3个例子不同。