优先队列

目录

1.优先队列(priority queue):

2.二叉堆(binary heap):

2.1两个性质:

2.2基本的堆操作:

3.优先队列的应用


1.优先队列(priority queue):

优先队列是一种按照优先级出队(deQueue)的队列,支持插入(Insert)和删除并返回最小值(DeleteMin)或者删除并返回最大值(DeleteMax)操作。

基本实现:

实现插入删除
无序链表O(1)O(N)
有序链表O(N)O(1)

二叉查找树

O(logN)(平均)O(logN)(平均)
平衡二叉查找树O(logN)(最坏)O(logN)(最坏)

2.二叉堆(binary heap):

2.1两个性质:

  • 结构性质

堆是一棵完全二叉树(complete binary tree),一棵高为h的完全二叉树有2^h 到 2^{h+1}-1个节点,所以完全二叉树的高是\left \lfloor logN \right \rfloor,即 O(log N)  .

用数组表示二叉堆,对于数组中任一位置i上的元素,其左儿子在位置2i上,右儿子在左儿子后的单元(2i+1),它的父亲则在位置\left \lfloor i/2 \right \rfloor上。

  • 堆序性质

最小元应该在根上,任意节点应该小于它的所有后裔。对于每一节点X(根节点除外),X的父亲中的关键字小于(或等于)X中的关键字。

2.2基本的堆操作:

  • 插入(Insert):

将一个元素X插入到堆中下一个空闲位置,如果不满足堆序,需要将该空闲位置沿着根的位置上滤(percolate up),直到满足堆序。

最坏情形插入时间为O(log N)。

  • 删除最小元(DeleteMIn):

将根处的最小元删除,将堆中最后一个元素X置入沿着从根开始包含最小儿子的一条路径上的一个正确的位置,一般需要将根处的空位置下滤(percolate down)到堆的底层。

最坏情形删除时间为O(log N);平均情形运行时间为O(log N)。

3.优先队列的应用

  • 图论算法
  • 选择问题

找出N个元素中的第k个最大的元素。

将N个元素读入一个数组,对该数组应用BuildHeap算法构建一个从大到小的堆,然后执行k次DeleteMin操作。运行时间 \Theta (Nlog N)

前k个元素通过调用一次BuildHeap 以总时间O(k)被置入堆中,对于其他N-k 个数依次检测是否要通过删除堆中的最小元并插入堆中,最后返回堆中的最小元素。运行时间\Theta (Nlog N)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值