堆和优先级队列
详细介绍见 Josh Hug 为 Berkeley CS61B 编写的教材
Priority Queues
二叉搜索允许我们有效地进行快速搜索树,但如果我们更关心如何快速找到最小或是最大的元素呢?下面先给出最小优先级队列 Priority Queue 的 Abstract 数据类型:
Heaps
对于 PQ 操作,前面文章中所有数据结构中,用二叉搜索树实现是运行时间最佳的,但仍然可以进一步优化提升。我们规定 min-heap 的属性如下:
Min-heap:每个节点都小于或等于其两个子节点;
Complete:仅在底层缺少(若有),所有节点尽可能靠左。

例如上图中绿色的堆是有效的,红色的则是无效的
Tree Representation
方法一
Tree1A 固定节点宽度
可视化如下:

Tree1B 可变节点宽度
可视化如下:

Tree1C 同级树
可视化如下:

方法二
重新调用不相交集的抽象数据结构,我们用数组来表示这个 Weighed Quick Union 结构
keys 数组表示索引映射到的键值,parents 数组表示该节点的父节点

这样看 parents 数组似乎是冗余的,keys 中的顺序跟树的级别顺序安全相同。
方法三
这种方法中,我们假设树是完整的,接着方法二中的发现,我们只用 keys 数组即可。
Last updated