1, 需求:根据优先级而不是数据进来的次序进行处理。
2, 优先级队列接口:
3,几种可能的实现:
- 基于向量/有序向量:部分接口效率有待改进。
- 基于列表/有序列表:部分接口效率有待改进。
- 基于BBST:三个接口均可O(logN)复杂度。
- 但BBST过于强大了,需要查找极值元;不需要维护全序关系,只需偏序即可。
4, 完全二叉堆:借助于完全二叉树,实现优先级队列。
- 完全二叉树:
-
完全二叉堆,及其实现:
-
堆序性:完全二叉堆的灵魂。
-
堆序性定义:任何一个节点,在数值上,都不会超过他的父亲。
-
最大元:在根节点处 (内部数组首元素)。
-
5,完全二叉堆的插入与上滤
- 效率:渐进意义上 O(logN). 常数意义上,存在改进的空间。
6,完全二叉堆的删除与下滤
- 效率:渐进意义上 O(logN). Note:每次下滤,做两次比较。
7, 完全二叉堆的批量建堆
- 自上而下的上滤:O(n), 效率不高。
- 自下而上的下滤:O(logn)
来源:https://www.cnblogs.com/sanlangHit/p/12258461.html