一个灵活的优先队列库,支持可插拔存储策略和快速的查找以及可变性。
项目描述
PriorityQ是一个用于管理优先队列(PQ)的库,具有更清晰的API,可以启用自定义比较器、高效地查找值的引用(在常数时间内)以及从PQ中删除值。这因为当前的heapq模块(在python标准库中)不提供高效的查找操作(它是O(n))并且没有删除元素并确保堆不变性的简单方法。
功能
元素的O(1)查找
元素删除(在O(log n)内)。
调整元素的优先级,而无需删除后插入。
元素的不可见句柄可以用来再次引用相同的项目。
允许重复元素。
可以将自定义比较器函数传递给PQ本身,而不是需要实现__cmp__。
它很简单易用
要创建一个PQ,只需这样做
# A simple object with a comparator
class Item(object):
def __init__(self, value):
self.value = value
def __cmp__(self, another):
return cmp(self.value, another.value)
from priorityq import PQ
pq = PQ()
pq.heapify([Item(r) for r in [1, 10, 2, 20, 4, 7, 9, 3, 5, 6]])
print list(pq)
# Should print:
# 1 2 3 4 5 6 7 9 10 20
handle_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 it
print list(pq)
# Should print:
# 1 2 3 4 5 6 7 9 20 25
handle_10.value = 10 # Modify its value using the same opaque handle as before
pq.adjust(handle_10) # Indicate to the heap to reprioritise/adjust it
print list(pq)
# Should print:
# 1 2 3 4 5 6 7 9 10 20
链接
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。
源代码分发
priorityq-0.0.9.tar.gz (10.7 kB 查看哈希值)
构建分发
priorityq-0.0.9-py2.py3-none-any.whl (21.5 kB 查看哈希值)