1 5實現乙個優先順序佇列

2022-09-22 03:21:08 字數 1182 閱讀 9689

問題

​ 怎樣實現又給按優先順序排序的佇列?並且在佇列上面每次pop操作總是返回優先順序最高的那個元素

解決方案

​ 下面的類利用heapq模組實現了乙個簡單的優先順序佇列:

import heapq

class priorityqueue:

def __init__(self):

self._queue =

self._index = 0

def push(self, item, priority):

self._index += 1

def pop(self):

下面 它的使用方式:

class item:

def __init__(self, name):

self.name = name

def __repr__(self):

return 'item()'.format(self.name)

q = priorityqueue()

q.push(item('foo'), 1)

q.push(item('foo'), 1)

q.push(item("spam"),5)

q.push(item('grok'),1)

print(q.pop()) # -》 item('spam')

print(q.pop()) # ->item('foo')

print(q.pop()) # ->item('foo')

print(q.pop()) # ->item('grok')

​ 仔細觀察可以發現,第乙個pop()操作返回優先順序最高的元素。另外注意到如果兩個有著相同優先順序的元素(foo,和grok),pop操作按照他們被插入到佇列的順序返回的。

討論

​ 在上面的**中,佇列包含了乙個(-priority,index,item)的元組。優先順序為負數的目的是使得元素按照優先順序從高到低排序。這個跟普通的按照優先順序從低到高排序的堆排序恰巧相反。

​ index變數的作用是保證等級優先順序元素的正確排序。通過儲存乙個不斷增加的index下標變數。可以確保元素按照它們插入的順序排序。而且,index變數也在相同優先順序元素比較的時候起到重要作用。

1 5 實現乙個優先順序佇列

問題 怎樣實現乙個按優先順序排序的佇列?並且在這個佇列上面每次pop操作總是返回優先順序最 高的那個元素 通過引入另外的 index 變數組成三元組 priority,index,item 就能很好的避免上面 的錯誤,因為不可能有兩個元素有相同的 index 值。import heapq class...

實現乙個優先順序佇列

怎樣實現乙個按優先順序排序的佇列?並且在這個佇列上面每次 pop 操作總是返回優先順序最高的那個元素 下面的類利用 heapq 模組實現了乙個簡單的優先順序佇列 import heapq class priorityqueue def init self self.queue self.index ...

1 5 實現優先順序佇列

想要實現乙個佇列,能夠以給定的優先順序來對準榮盛排序,而且每次pop操作時候都會返回優先順序最高的那個元素 使用heapq模組來實現乙個簡單的優先順序佇列 import heapq class priorityqueue def init self self.queue self.index 0 d...