Python利用heapq實現乙個優先順序佇列的方法

2022-09-28 18:06:12 字數 816 閱讀 8765

實現乙個優先順序佇列,每次pop的元素要是優先順序高的元素,由於heapq.heapify(list)預設構建一程式設計客棧個小頂堆,因此要將priority變為相反數再push,**如下:

import heapq

class priorityqueue(object):

"""實現乙個優先順序佇列,每次pop優先順序最高的元素"""

def __init__(self):

self._queue =

self._index = 0

def push(self,item,priority):

heapq.heappush(self._queue,(-priority,self._index,item))#將priority和index結合使用,在priority相同的時候比較index,pop先進入佇列的元素

self._index + 1

def pop(self):

return heapq.heappop(self._queue)[-1]

if __name__ == '__main__':

pqueue = priorityqueue()

pqueue.push('d',4)

pqueue.pu程式設計客棧sh('f',3)

pqueue.push('a',6)

pqueue.push('s',2)

print(pqueue.pop())

print(pqueue.pop())

print(pqueue.pop())

本文標題: python利用heapq實現乙個優先順序佇列的方法

本文位址:

Python中的heapq模組

heapq模組提供基於堆的優先排序演算法,內建模組位於.anaconda3 lib heapq.py。堆的邏輯結構就是完全二叉樹,並且二叉樹中父節點的值小於等於該節點的所有子節點的值。這種實現可以使用 heap k heap 2k 1 並且 heap k heap 2k 2 其中 k 為索引,從 0...

python 堆操作 heapq庫

這個模組 build in 實現了乙個堆的資料結構,完美的解決了top k問題,以後解決top k問題的時候,直接把這個模組拿來用就可以了 注意,預設的heap是乙個小頂堆!heapq模組提供了如下幾個函式 heapq.heapify x 將列表x進行堆調整,預設的是小頂堆 heapq.merge ...

Python中堆模組heapq

對於排序演算法有很多種,其中包括常見的 氣泡排序,選擇排序,插入排序,希爾排序,快速排序,歸併排序,堆排序 這裡主要講一下堆排序,可以採用自己的方式實現,也可以採用python內建模組heapq實現,現在分別從這兩種方法實現一下.1 自己實現 import math from collections...