簡介
優先順序佇列是基於堆的,關於堆的時候可以參考文章堆,優先順序佇列就是入隊時,會分配乙個優先順序,之後出隊時,根據優先順序出列。如,入隊時:(4,"a"), (6,"r"), (3"d"),則出隊順序(6,"r"), (4,"a"),(3"d")。
優先順序佇列的python實現
class priorityqueue(object):
def __init__(self, maxsize):
self.maxsize = maxsize
self._maxheap = maxheap(maxsize)
def push(self, priority, value):
# 注意這裡把這個 tuple push 進去,python 比較 tuple 從第乙個開始比較
# 這樣就很巧妙地實現了按照優先順序排序
entry = (priority, value) # 入隊的時候會根據 priority 維持堆的特性
self._maxheap.add(entry)
def pop(self, with_priority=false):
entry = self._maxheap.extract()
if with_priority:
return entry
else:
return entry[1]
def is_empty(self):
return len(self._maxheap) == 0
def test_priority_queue():
size = 5
pq = priorityqueue(size)
pq.push(5, "purple") # priority, value
pq.push(0, "white")
pq.push(3, "orange")
pq.push(1, "black")
res =
while not pq.is_empty():
assert res == ["purple", "orange", "black", "white"]
test_priority_queue()
其中maxheap類是這節中堆實現過的
其實是根據堆的特性比較元組中第乙個數字也就是優先順序的大小。
python優先順序佇列
class priorityqueue data dict def init self pass 入隊 如果物件沒有優先等級,則新增到隊尾,如果對空,則預設等級為1 如果物件有優先等級,如果有同等級的則新增到對應等級末尾 def push self,obj,key none if key none ...
優先順序佇列 python
在之前寫最短路徑,和哈夫曼編碼的時候都用到了優先順序佇列優化,用的是c 中的包,priority queue。那在python中會以什麼形式存在呢。class array object def init self,maxsize none self.elem none maxsize self.le...
佇列 優先順序佇列
優先順序佇列的隊尾是不需要改變的,永遠在低下標處。當佇列增加資料時,隊頭的位置就是資料項的大小減去1.public class priorityq 插入 public void insert long item else quearray j 1 item nitem 刪除 public long ...