应用需求:操作系统的任务调度(电脑类比于医院,cpu类比于医生)
问题模型:
优先级队列:首先它是一个队列,不是FIFO而是按照优先级访问
栈和队列是优先级队列的特例:优先级完全取决于元素的插入次序
优先级队列的操作
优先级队列的实现:
- 基本实现:完全二叉堆
vecto/向量/数组不够,树结构过了:折中结合
基本思路:通过向量表示一颗完全二叉树即完全二叉树,在完全二叉堆的基础上进而实现优先级队列
物理上没有任何改动所有元素仍然构成线性向量,但逻辑上是个完全二叉树,称为完全二叉堆
PQ完全二叉树的堆序性
在完全二叉堆所有节点间定义某种次序:任何节点不超过其父亲
PQ即完全二叉堆的元素插入
PQ即完全二叉堆的元素删除
删除只发生在堆顶(getMax且max一定在堆顶)
破坏结构性—末元素移至堆顶–修复结构性–破坏堆序性—交换并且可能不断逆父子序则不断下降直到大于两个子节点或者成为叶子节点无孩子—这个过程即下滤
建堆
建堆:给n个元素将其组织成堆
堆排序
物理上一系列线性元素逻辑上可以看作完全二叉树
通过Floyd算法 在线性时间 建立完全二叉堆
)