一个灵活的优先级队列库,支持可插入存储策略和快速查找和可变。

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
实现接口方法时不允许java@Override   使用BuffereImage加载映像时java高ram使用率   java For循环混乱,为什么不是循环?   java Android网格视图字符串对齐问题   java如何将方法与比较类型的附加功能进行比较?   在Java Swing中放置JSepator后的间隙大小   java如何避免并发访问我的网站中的支付链接   java如何从现有的Unix服务器连接到FTP服务器?   Spring中的java用户相关bean定义   带有scribesjava库的wordpress Woocommerce REST API返回消费者密钥参数缺失错误消息   java我可以自动检测特定设备连接的串行端口吗?   Javafx棋盘游戏   java使用JTextPane显示HTML,支持SVG吗?   SpringBoot如何在java中将映射转换为实体对象?   如何使用java代码对xls文件进行密码保护   Java JPA(EclipseLink)如何在持久化实际实体之前接收下一个生成的值?   Javaservlet启动外部进程