前面我们讲到了 贪心算法的哈夫曼编码规则,原理图如下:
如果我们知道给定的数组已排序(按频率的非递减顺序),我们可以在 O(n) 时间内生成霍夫曼代码。以下是用于排序输入的 O(n) 算法。
1.创建两个空队列。
2.为每个唯一字符创建一个叶节点,并按频率非降序将其入队到第一个队列。最初第二个队列是空的。
3.通过检查两个队列的前端以最小频率使两个节点出队。重复以下步骤两次
1. 如果第二个队列为空,则从第一个队列中出队。
2. 如果第一个队列为空,则从第二个队列中出队。
3. 否则,比较两个队列的前端并将最小值出队。
4.创建一个新的内部节点ÿ