最大優先佇列是最大堆的乙個應用,如果不熟悉最大堆可以參考:
最大堆排序演算法
'''
優先佇列是一種用來維護由一組元素構成的集合s的資料結構,
的每乙個元素都有乙個相關的值,稱為關鍵字。
乙個最大優先佇列支援一下操作:
insert(s,x):把元素x插入集合s中。
maximum(s):返回s中具有最大鍵值得元素。
extract-max(s):去掉並返回s中具有最大關鍵字的元素。
increase-key(s,x,k):將原始x的關鍵字增加到k(k>x)。
max-heap-insert(s,x)
s.heap-size=s.heap-size+1
s[s.heap-size]=-∞
heap-increase-key(s,s.heap-size,x)
heap-maximum(s)
return s[i]
heap-extract-max(s)
if s.heap-size<1:
error 'heap underflow'
max=s[1]
s[1]=s[s.heap-size]
s.heap-size=s.heap-size-1
max-heapify(s,s.heap-size,1)
return max
heap-increase-key(s,i,k)
if k1 and s[parent(i)]
import math
from heap_sort import max_heapify,build_max_heap
defmax_heap_insert
(s,x)
:'''向最大優先序列增加新元素x,在陣列最末尾增加無窮小元素,將無窮小元素增加到x'''
heapsize=
len(s)
float
("-inf"))
heap_increase_key(s,heapsize,x)
defheap_maximum
(s):
'''返回最大序列陣列最大值'''
return s[0]
defheap_extract_max
(s):
'''去掉並返回s中具有最大關鍵字的元素
最大堆第乙個元素為最大關鍵字,用最後乙個元素替換首元素,移除陣列最後乙個元素並重建最大堆'''
heapsize=
len(s)
if heapsize<1:
raise
'heap underflow'
max=s[0]
s[0]
=s[heapsize-1]
s.pop(
) build_max_heap(s)
return
maxdef
heap_increase_key
(s,i,k)
:'''用元素k替換陣列i位元素,重建最大堆'''
if k:raise
'new key is smaller than current key'
s[i]
=k build_max_heap(s)
a=[11
,14,12
,13,10
,6,9
,8,7
,1,2
,4,3
,5,0
]print
(a)build_max_heap(a)
print
(a)max_heap_insert(a,15)
print
(a)print
(heap_maximum(a)
)print
(heap_extract_max(a)
)print
(a)heap_increase_key(a,10,
16)print
(a)[11,
14,12,
13,10,
6,9,
8,7,
1,2,
4,3,
5,0]
[14,13
,12,11
,10,6
,9,8
,7,1
,2,4
,3,5
,0][
15,14,
12,13,
10,6,
9,11,
7,1,
2,4,
3,5,
0,8]
1515[14
,13,12
,11,10
,6,9
,8,7
,1,2
,4,3
,5,0
][16,
14,12,
11,13,
6,9,
8,7,
1,10,
4,3,
5,0]
最大優先佇列
extract max s 返回並去掉s中最大的元素。increase key s,x,k 將集合s中的x元素關鍵字的值提公升至k,假設k不小於原x的關鍵字值。insert s,x 將元素x插入集合s中。include include 針對節點i及其子樹進行最大堆的調整 void max heapi...
廣度優先搜尋之最大殺敵數
在你的位置放置乙個炸彈,放在哪點能殺最多的敵人,你的位置不能和敵人相同 輸入 13 13 3 3 gg.ggg ggg.g g g g g g g g gg.ggg.gg g g g.g.g g g g ggg.gg g g g g gg.ggg g.gg 輸出將炸彈放置在 7,11 最多可以消滅 ...
python優先佇列
q queue.priorityqueue q.put 呼叫的是heapq.heap item 而headpush 方法則是呼叫每個item的比較大小方法,預設是小的在頂端,所以是小頂堆。所以能用元組自定義插入順序,比如 2,item1 3,item2 所以q.put 2.item1 q.put 3...