优先级队列支持“减少键”操作(https://en.wikipedia.org/wiki/Priority_queue#Summary_of_running_times),它是许多最佳搜索类型算法所必需的。它应该在O(log n)时间内运行。 scala.collection.mutable.PriorityQueue能否有效地支持这个?
查看API文档,我能找到的最接近的是
def update (idx: Int, elem: A) : Unit
Replaces element at given index with a new value.
但是这有两个潜在的问题...首先必须找到元素并且不清楚findIndexOf
的时间复杂度是什么。*其次看起来像update
允许值为增加和减少;目前尚不清楚这是否可以有效实施。
*参见例如How to implement O(logn) decrease-key operation for min-heap based Priority Queue?证明这可以有效地完成。
有谁知道更新的时间复杂性是什么?
答案 0 :(得分:3)
scala.collection.mutable.PriorityQueue
不支持decrease-key
操作。
要实施PQ
decrease-key
操作,必须使用额外的数据结构来扩充典型的PQ
实现,以便进行索引。
您引用的帖子How to implement O(logn) decrease-key operation for min-heap based Priority Queue的已接受答案说明了如何执行此操作。
Java标准库也不包含索引优先级队列。
您可以在Princeton Algorithms站点上找到一个Java实现。
以上位于here
的Scala版本