如何在O(n)的时间复杂度下构造哈夫曼树

来源:互联网 发布:机顶盒桌面软件 编辑:程序博客网 时间:2024/06/02 16:08

描述

众所周知,合并果子是堆的入门题,而 合并果子就是构造哈夫曼树。现在问题就是,在给定有序的数组a下,如何O(n)构造哈夫曼树。

算法

使用两个队列,从小到大将数组a的元素加入队列fir,队列sec为空。

每次我们将两个元素合并,可以证明一定是三种之一。

  1. 队列fir中的队首和第二位合并
  2. 队列sec中的队首和第二位合并
  3. 队列fir中的队首和sec中的队首合并

优先考虑合并的两个数的和较小的情况。

将每次合并完的数放入sec队列,直到sec队列只有一个元素,结束算法。

3 0
原创粉丝点击