이 기사는 Python이 (코드를 사용하여) 우선 순위 대기열을 구현하는 방법에 대한 것입니다. 이는 특정 참조 값을 가지고 있으므로 도움이 필요할 수 있습니다.
1. 요구 사항
주어진 우선 순위로 요소를 정렬하고 각 팝 작업에 대해 가장 높은 우선 순위를 가진 요소를 반환할 수 있는 대기열을 구현하려고 합니다2. 해결 방법
heapq 모듈을 사용하여코드를 구현합니다. :
import heapq #利用heapq实现一个简答的优先级队列 class PriorityQueue: def __init__(self): self._queue=[] self._index=0 def push(self,item,priority): heapq.heappush(self._queue,(-priority,self._index,item)) self._index+=1 def pop(self): return heapq.heappop(self._queue)[-1] class Item: def __init__(self,name): self.name=name def __repr__(self): return 'Item({!r})'.format(self.name) if __name__ == '__main__': q=PriorityQueue() q.push(Item('foo'),1) q.push(Item('bar'),5) q.push(Item('spam'),4) q.push(Item('grok'),1) print(q.pop()) print(q.pop()) #具有相同优先级的两个元素,返回的顺序同它们插入到队列时的顺序相同 print(q.pop()) print(q.pop())
실행 결과:
Item('bar') Item('spam') Item('foo') Item('grok')
위 코드에서 큐는 튜플(-우선순위, 인덱스, 항목)로 구성됩니다. 우선순위에 음수 값을 취하는 목적은 대기열이 요소의 우선순위가 높은 것부터 낮은 것 순으로 배열되도록 하는 것입니다.
변수 인덱스의 기능은 동일한 우선순위를 가진 요소를 적절한 순서로 배열하는 것입니다. 지속적으로 증가하는 인덱스를 유지함으로써 요소는 대기열에 나타나는 순서대로 정렬됩니다. 인덱스의 역할을 설명하려면 다음 예를 살펴보세요.
코드:
class Item: def __init__(self,name): self.name=name def __repr__(self): return 'Item({!r})'.format(self.name) if __name__ == '__main__': a=(1,Item('foo')) b=(5,Item('bar')) #下面一句打印True print(a<b) c=(1,Item('grok')) #下面一句会报错:TypeError: '<' not supported between instances of 'Item' and 'Item' print(c<a) d=(1,0,Item('foo')) e=(5,1,Item('bar')) f=(1,2,Item('grok')) #下面一句打印True print(d<e) #下面一句打印True print(d<f)
위 내용은 Python에서 우선순위 큐를 구현하는 방법(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!