優(yōu)先隊(duì)列

優(yōu)先隊(duì)列是堆的常見(jiàn)應(yīng)用,優(yōu)先隊(duì)列也有兩種形式:最大優(yōu)先隊(duì)列和最小優(yōu)先隊(duì)列
優(yōu)先隊(duì)列是一種用來(lái)維護(hù)由一組元素構(gòu)成的集合S的數(shù)據(jù)結(jié)構(gòu),其中的每一個(gè)元素都有一個(gè)相關(guān)的值,稱為關(guān)鍵字,其中最大優(yōu)先隊(duì)列的典型應(yīng)用就是共享計(jì)算機(jī)系統(tǒng)的作業(yè)調(diào)度。
一個(gè)最大優(yōu)先隊(duì)列支持以下四個(gè)操作:

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

可通過(guò)HEAP-MAXIMUM在O(1)時(shí)間內(nèi)實(shí)現(xiàn)MAXIMUM操作

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

可通過(guò)HEAP-EXTARCT-MAX實(shí)現(xiàn),類似于堆排序中HEADPSORT過(guò)程中的for循環(huán)體

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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容