Scala:可以有效地使用PriorityQueue.update来减少密钥吗?

时间:2016-09-18 11:16:17

标签: scala priority-queue

优先级队列支持“减少键”操作(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?证明这可以有效地完成。

有谁知道更新的时间复杂性是什么?

1 个答案:

答案 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版本