算法学习笔记--堆的常见应用优先队列

优先队列:有两种形式,最大优先队列和最小优先队列
优先队列是一种用来维护由一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字。

优先级队列支持的操作:
Insert(S,x):把元素x 插入集合中

Maximum(S):返回具有最大键值的元素
Extract-Max(S):去掉并返回S中的具有最大键值的元素。

Increase(S,x,k).将元素的关键字值增加到k,这里的k值不小于原x的k值。
最大优先队列的应用:共享计算机系统的作业调度。

最小优先级队列的支持的操作:
Insert(S,x):把元素x 插入集合中

Minimum(S):返回具有最小键值的元素
Extract-Min(S):去掉并返回S中的具有最小键值的元素

decrease(S,x,k).将元素的关键字值减小到k,这里的k值大于原x的k值
最小优先队列可用于事件驱动模拟。队列保存事件以及其对应的发生事件


最大优先级队列实现:

伪代码:
HEAP-MAXIMUM(A)

1 return A[1]
可以在O(1)时间内实现MAXIMUM操作。
HEAP-EXTRACT-MAX(A)

1  if A.heapsize<1
2     error "heap underflow"

3  max=A[1]
4  A[1]=A[A.heapsize-1]

5  A.hheapsize=A.heapsize-1
6  HEAP-MAXIMUM(A)

7 return max
时间复杂度为O(lgn)

HEAP-INCREASE-KEY(A,i,key)
1 if key<A[i]

2     error"new key is smaller than current key"
3  A[i]=key

4  while(i>1 and A[PARENT(i)<A[i]])
5          exchange A[i] with A[PARENT(i)]

6           i=PARENT(i)
时间复杂度 O(lgn)

MAX-HEAP-INSERT(A,key)
1 A.heap-size=A.heap-size+1

2 A[A.heapsize]=负无穷
3 HEAP-INCREASE-KEY(A,A.heapsize,key)
在包含n个元素的堆上,运行时间为O(lgn)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值