優先佇列 Priority Queue

2021-08-19 23:27:40 字數 1287 閱讀 7157

堆是電腦科學中一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵樹的陣列物件。在佇列中,排程程式反覆提取佇列中第乙個作業並執行,因為實際情況中某些時間較短的任務將等待很長時間才能結束,或者某些不短小,但具有重要性的作業,同樣應當具有優先權。堆即為解決此類問題設計的一種資料結構。

堆是具有以下性質的完全二叉樹:每個結點的值都大於或等於其左右孩子結點的值,稱為大頂堆;或者每個結點的值都小於或等於其左右孩子結點的值,稱為小頂堆。

二叉堆是乙個有堆排列的二叉樹。 ro

ot=a

[0] roo

t=a[

0]

childre

n(a[

i])=

(a[2

i+1]

,a[2

i+2]

) chi

ldre

n(a[

i])=

(a[2

i+1]

,a[2

i+2]

)par

ent(

a[i]

)=a[

⌊(i−

12)⌋

] par

ent(

a[i]

)=a[

⌊(i−

12)⌋

]sift up & sift down

def

siftdown

(i): // also known as bubbledown

while a[i] has worse priority than one or both children:

swap a[i], best child

defsiftup

(i): // also known as bubbleup

while i > 0

and a[i] has better priority than its parent:

swap a[i], parent

i = index of parent

刪除最小值操作,取出後進行sift up和sift down即可,順序無關。

make a heap

def

makeheap

():for i = n-1,n-2,...,2,1,0:

siftdown(i)

使用sift down更快,因為可以保證接近根節點的元素不動,減少了操作。

總時間複雜度為o(n)

k = m/n時效率最高

STL容器 優先佇列priority queue

priority queue顧名思義,是乙個具有權值概念的queue,它和queue一樣允許加入新元素 移除舊元素等功能。由於這是乙個queue,所以只允許在底部加入元素,從頂部取出元素。但優先佇列帶有權值概念,其內的元素自動按照元素的權值排序。權值最高者排在最前面。stl的priority que...

STL初步 優先佇列Priority queue

這個優先到底是如何優先?和普通佇列區別在哪?priority queue type,container,functional priority queue,less q priority queue,less a q priority queue,less b 優先佇列中沒有迭代器 也沒有clear...

優先順序佇列用法詳解(priority queue)

由於優先順序佇列的內部資料結構為堆,所以這裡先介紹堆的一些操作。堆的一些函式操作在algorithm標頭檔案中 在 first,last 範圍內 構造最大堆,first,last 可以是vector指標也可以是陣列指標 make heap first last make heap first las...