文章目录
一、基本实现
1. API
各个collection的不同之处在于,到底删除哪一个元素。
例如,栈删除的是最后加入的,队列删除的是最早加入的,而优先队列删除的是最大的(或最小的)。
2. 基本实现方法
- 两种基本实现方法
优先队列的实现有两种基本实现方法:unordered 和 ordered。
- 无序优先队列的实现:delete时遍历找到最大的,并将最大的与最后一个交换,删除最大的(此时是最后一个)。
-
有序优先队列的实现(略)。大致就是插入后遍历数组找到合适的顺序位置,并插入。
-
时间复杂度
目标是找到一个logN的方法。
- 应用举例
给定N个输入数据,没有足够的内存来存储这些输入数据,如何找出这些数据中最小的M个呢?
使用优先队列。每次读取一个数据放入优先队列,当优先队列中的元素大于M个时,调用pq.delMin方法,去掉其中最小的。
binary heap实现的优先队列表现最优。
3. Binary heap实现
(1)定义
- 完全二叉树是什么