여기껄 클래스화시켰다. 큐의 순서는 출력해보면 알겠지만 우선순위에 따라서 출력된다.
# -*- encoding: cp949 -*- from heapq import * class priority_queue(): def __init__(self): self.pq = [] # list of entries arranged in a heap self.entry_finder = {} # mapping of tasks to entries self.REMOVED = '<removed-task>' # placeholder for a removed task def put(self, task, priority=0): 'Add a new task or update the priority of an existing task' if task in self.entry_finder: self.remove(task) self.entry = [task, priority] self.entry_finder[task] = self.entry heappush(self.pq, self.entry) def remove(self, task): 'Mark an existing task as REMOVED. Raise KeyError if not found.' self.entry = self.entry_finder.pop(task) self.entry[-1] = self.REMOVED def pop(self,): 'Remove and return the lowest priority task. Raise KeyError if empty.' while self.pq: self.task, self.priority = heappop(self.pq) if self.task is not self.REMOVED: del self.entry_finder[self.task] return self.task raise KeyError('pop from an empty priority queue') def __str__(self): return str(self.pq) q = priority_queue() #인스턴스 만듬. q.put(10,1) #원소 10을 넣고 우선순위를 1로 넣음. (우선순위가 낮을수록 큐의 가장 윗부분에 오게됨.) q.put(5,0) #원소 5를 넣고 우선순위 0을 넣음. 나중에 들어갔음에도 10보다 더 위에있게됨. q.put(20,3) print q #확인용 print q.pop() #pop 확인용 print q
'algorithm > theory' 카테고리의 다른 글
벨만 포드 알고리즘, 플로이드 알고리즘. (0) | 2016.09.10 |
---|---|
다익스트라 알고리즘. (0) | 2016.09.09 |
kmp 알고리즘(문자열 매칭) (0) | 2016.08.19 |
각종 정렬 시간 비교 (0) | 2016.08.02 |
위상 정렬. (0) | 2016.08.01 |