一个灵活的优先级队列库,支持可插入存储策略和快速查找和可变。
priorityq的Python项目详细描述
priorityq是一个用于管理优先级队列(pq)的库,它使用更干净的api来启用自定义比较器, 有效地查找对值的引用(在恒定时间内)并从pq中删除值。这是 因为当前的heapq模块(在python的标准库中)没有提供有效的 find操作(它是o(n))无法轻松删除元素并确保堆不变 之后。
功能
- o(1)元素的发现
- 可能删除元素(在o(log n)中)。
- 调整元素的优先级而不需要先删除后插入。
- 可用于再次引用同一项的元素的不透明句柄。
- 允许重复元素。
- 自定义比较器函数可以传递给pq本身,而不需要实现cmp。
使用起来很简单
要创建PQ,只需执行以下操作:
# A simple object with a comparatorclassItem(object):def__init__(self,value):self.value=valuedef__cmp__(self,another):returncmp(self.value,another.value)frompriorityqimportPQpq=PQ()pq.heapify([Item(r)forrin[1,10,2,20,4,7,9,3,5,6]])printlist(pq)# Should print:# 1 2 3 4 5 6 7 9 10 20handle_10=pq.find(10)# Happens in O(1)handle_10.value=25# Modify its value - O(log n)pq.adjust(handle_10)# Indicate to the heap to reprioritise/adjust itprintlist(pq)# Should print:# 1 2 3 4 5 6 7 9 20 25handle_10.value=10# Modify its value using the same opaque handle as beforepq.adjust(handle_10)# Indicate to the heap to reprioritise/adjust itprintlist(pq)# Should print:# 1 2 3 4 5 6 7 9 10 20