1 5 實現優先順序佇列

2021-09-26 23:30:32 字數 2071 閱讀 8718

想要實現乙個佇列,能夠以給定的優先順序來對準榮盛排序,而且每次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('bar'),5)

q.push(item('spam'),4)

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

print(q._queue)

print(q.pop())

print(q.pop())

print(q.pop())

輸出

[(-5, 1, item(『bar』)), (-1, 0, item(『foo』)), (-4, 2, item(『spam』)), (-1, 3, item(『grok』))]

item(『bar』)

item(『spam』)

item(『foo』)

class item:

def __init__(self, name):

self.name= name

def __repr__(self):

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

a = item('foo')

b = item('bar')

print(a)

print(b)

a輸出item(『foo』)

item(『bar』)

traceback (most recent call last):

file 「/users/zhangkun/documents/github/geektime/pycookbook.py」, line 26, in

a如果按照元組(priority,item)形式來表示元素,只要優先順序不同,就能比較,如果優先順序相同就比較第二項,此時也會和上面一樣報錯

class item:

def __init__(self, name):

self.name= name

def __repr__(self):

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

a = (1, item('foo'))

b = (2, item('bar'))

print(a輸出:

true

traceback (most recent call last):

file 「/users/zhangkun/documents/github/geektime/pycookbook.py」, line 28, in

print(c不光有優先順序,還通過引入額外的索引值建立元組(priority,index,item)就完全避免這個問題,因為沒有兩個元組index相同,一單比較操作的結果可以確定了,python就不會找再去比較剩下的元組其他元素了劃重點!!!

class item:

def __init__(self, name):

self.name= name

def __repr__(self):

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

c = (2, 1,item('ccc'))

d = (2, 2,item('ccc'))

print(c輸出 true

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

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

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

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

優先順序佇列的實現

優先順序佇列 佇列裡面的所有元素都有相應的權值,元素的刪除順序由這些權值決定。優先順序佇列的實現一般用堆來實現其效率比一般的實現要高。要弄清楚堆我們得先弄清楚下面的定義 一顆大根樹 小根樹 是這樣一棵樹,其中每個節點的值都大於 小於 或等於其子節點 如果有子節點的話 的值。大根堆 乙個大根堆 小根堆...