优先队列

优先队列是堆的常见应用,优先队列也有两种形式:最大优先队列和最小优先队列
优先队列是一种用来维护由一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字,其中最大优先队列的典型应用就是共享计算机系统的作业调度。
一个最大优先队列支持以下四个操作:

  • INSERT(S, x),把元素x插入集合S中
  • MAXIMUM(S),返回S中具有最大键字的元素
  • EXTRACT-MAX(S),去掉并返回S中的具有最大键字的元素
  • INCREASE-KEY(S, x, k),将元素x的关键字值增加到k
MAXIMUM(S)

可通过HEAP-MAXIMUM在O(1)时间内实现MAXIMUM操作

HEAP-MAXIMUM(A)
  return A[1]
EXTRACT-MAX(S)

可通过HEAP-EXTARCT-MAX实现,类似于堆排序中HEADPSORT过程中的for循环体

HEAP-EXTRACT-MAX(A)
  if A.heap-size < 1
    error "heap underflow"
  max = A[1]
  A[1] = A[A.heap-size]
  A.heap-size = A.heap-size - 1
  MAX-HEAPIFY(A, 1)
  return max
INCREASE-KEY(S, x, k)
HEAP-INCREASE-KEY(A, i, key)
  if key < A[I]
    error "new key is smaller than current key"
  A[I] = key
  while i > 1 and A[PARENT(i)] < A[i]
    exchange A[i] with A[PARENT(i)]
    i = PARENT(i)
INSERT(S, x)
MAX-HEAP-INSERT(A, key)
  A.heap-size = A.heap-size + 1
  A[A.heap-size] = math.MinInt32
  HEAP-INCREASE-KEY(A, A.heap-size, key)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容