Python筆記 之 最大優先佇列

2021-10-10 00:22:52 字數 2535 閱讀 8111

最大優先佇列是最大堆的乙個應用,如果不熟悉最大堆可以參考:

最大堆排序演算法

'''

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