Python具有heapq
实现堆数据结构的模块,它支持一些基本操作(push,pop).
如何从O(log n)中的堆中删除第i个元素?是否可以使用heapq
或者我必须使用其他模块?
请注意,文档底部有一个示例:http: //docs.python.org/library/heapq.html ,它提出了一种可能的方法 - 这不是我想要的.我想要删除元素,而不仅仅是标记为删除.
我指的是:http://docs.python.org/tutorial/datastructures.html
list.index(x)
在大O表示法方面,函数的运行时间是多少?
使用Scala 2.9实现一种Dijkstra算法(伪代码)
val queue = new PriorityQueue
queue.insert(...)
while (!queue.isEmpty) {
val u = queue.extractMin
queue.foreach { v =>
if (condition(u, v))
queue.decreaseKey(v, newPriority)
}
}
Run Code Online (Sandbox Code Playgroud)
我想改变Scala中项目的优先级collection.mutable.PriorityQueue
.
因此试图
但是我找不到一种方法来更新优先级或删除特定项目(不一定是头元素),就像从优先级队列java.util.PriorityQueue#remove(Object)
中
删除项目一样.
如何完成此任务scala.collection.mutable.PriorityQueue
或者我必须使用java.util.PriorityQueue
?
有没有人知道这种方法是否缺乏设计,并且建议在更改某些项目的优先级后重建队列(可能需要查看有关优先级队列与动态项目优先级的讨论)?