優先佇列是一種用來維護由一組元素構成的集合s的資料結構,其中的每乙個元素都有乙個相關的值,稱為關鍵字。優先佇列有最大優先佇列和最小優先佇列。
優先佇列和一般的fifo佇列不一樣,從優先佇列獲取出來的值是喲優先順序的。例如,用來處理傳送給計算機部門印表機的職位:部門主管發來的職位應該首先被列印,依次是經理,研究生和本科生。放到優先佇列的值應該是傳送的優先順序(比如主管是5,經理是3,研究生是2,大學生是1),然後和值關聯的可以列印的文件。只要印表機空閒,那麼最高優先順序的的職位唄移出佇列並列印。(具有相同優先順序的職位沒有具體順序)
最大優先佇列:常用於共享計算機系統的作業排程
最小優先佇列:基於事件驅動的模擬器
最大優先佇列的基本操作有:
用堆來實現最大優先佇列的偽**1 insert(s,x)
//把元素x插入到s中
2 maximum(s)
//獲取s中最大關鍵字的元素
3 extract-max(s)
//去掉並返回s中最大關鍵字的元素
4 increase-key(s,x,k)
//把x的關鍵字增大為k
// 獲取優先順序最高的元素
heap-maximum(a)
1return
a[1]
// 去掉並返回a中最大關鍵字的元素
heap-extract-max(a)1if
a.heap-size < 1
2 error "heap underflow"
3 max=a[1]
4a[1]=a[a.heap-size]
5a.heap-size=a.heap-size-1
6 max-heapify(a,1)
7return max
//把x的關鍵字增大為k
heap-increase-key(a,i,key)
1if key2 error "new key is smaller than current key"
3a[i]=key
4while i>1
anda[parent(i)]5 exchange a[i] with a[parent(i)]
6 i=parent(i)
參考資料//把元素key插入到a中
max-heap-insert(a,key)
1 a.heap-size+=1
2 a[heap-size]=負無窮
3 heap-increase-key(a,a.heap-size,key)
1 《演算法導論 原書第3版》
2
優先佇列和二叉堆
優先佇列 我們知道普通佇列滿足元素先進先出,也就可以看成先進的元素具有更高的優先順序,在出列時優先順序高的先出。而優先佇列中的元素的優先順序不侷限於 先進 某種定義賦予它們不同的優先順序,優先順序更高的先出列。本文涉及的優先佇列優先順序定義是 數值越小,優先順序越高。也就是說,每次取出的元素都是當前...
優先佇列和二叉堆
優先佇列是一種常用的adt,其中的元素有序排列,入隊的元素會插入到正確的位置,隊首元素始終為最小 大 值,隊首出隊後優先佇列仍然保持原來的性質。這裡我們規定優先佇列以公升序排列。優先佇列提供的介面包括 二叉堆是優先佇列一種常用的實現,二叉堆是一種完全二叉樹,完全二叉樹除最低一層外其它層均被填滿,最低...
優先佇列 二叉堆
優先佇列 二叉堆 二叉堆是一棵完全二叉樹,最大堆 最小堆 中,所有根節點的鍵值都要比對應的子樹要大 小 由於是完全二叉樹,所以儲存結構可以採用陣列。最大堆的建立 include include include include include include define inf 0x3f3f3f3f...