摘要: Huffman 树是一个经典算法. 本文讨论它的策略.
观点一: 自底向上
每次是将当前权值最小的两个节点进行合并, 获得一个新的节点, 权值是前两者之和.
从直观来讲, 不断获得 (子孙节点更多的) 分支节点, 最后才获得根节点, 所以是向底向上的.
观点二: 自顶向下
原问题具有
n
n
n 个节点, 可以直接看成
n
n
n 棵树的一个森林. 经过一次合并后, 变成了具有
n
−
1
n - 1
n−1 棵树的森林的合并问题.
将原问题直接转换成规模较上的子问题, 且子问题与原问题性质完全相同, 因此是自顶向下的.
相关问题: 归并排序
归并排序非递归版本先解决的是长度为 2 子序列的排列问题, 然后是长度为 4, 以此类推. 因此, 它是自底向上的.
归并排序递归版本看起来是自顶向下的, 但是最终的实现, 还是要把子序列进行合并, 所以仍然是自底向上的.
小结
我支持观点二. 不服来杠.