二叉堆和優先佇列

2021-07-31 14:34:07 字數 1417 閱讀 1468

優先佇列是一種用來維護由一組元素構成的集合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...