描述
众所周知,合并果子是堆的入门题,而 合并果子就是构造哈夫曼树。现在问题就是,在给定有序的数组
a
下,如何
算法
使用两个队列,从小到大将数组
a
的元素加入队列
每次我们将两个元素合并,可以证明一定是三种之一。
- 队列 fir 中的队首和第二位合并
- 队列 sec 中的队首和第二位合并
- 队列 fir 中的队首和 sec 中的队首合并
优先考虑合并的两个数的和较小的情况。
将每次合并完的数放入 sec 队列,直到 sec 队列只有一个元素,结束算法。