可能重复:
How can I implement decrease-key functionality in Python's heapq?
您好,
我在Python中使用heapq来实现优先级队列。队列中的项目的优先级发生了很大变化,当发生这种情况时,我需要堆积heapq 问题是heapq只有一个heapify函数来堆积整个堆,而不是从堆内的某个项开始的heapify,知道其余的已经是一个排序很好的堆(就像经典的CS文本书堆化一样)。登记/> 差异很大,因为每个heapify调用都是O(n)而不是O(lgn)。 可以在没有使用标准列表实现堆的情况下完成吗?
谢谢!
我的问题似乎是How can I implement decrease-key functionality in Python's heapq?的副本 这里的答案表明,没有办法重新实现基于堆的队列,并且具有适当的特定项目的O(lgn)堆积。
答案 0 :(得分:0)
通过使当前堆项无效(在项目中引发一个标志)并将相同的项目推送到堆(即O(lgn)),我能够通过heapify避免这个特殊问题。
这可能会使堆中出现一些无效项(我在pop()中清理),但是避免重新实现堆,而堆项知道它们当前的堆位置和基于堆的新位置。