如果优先级队列有两个操作:insert
和broken_min
。
其中broken_min
返回第一个或第二个最小项目。
这些都不能在o(logn)时间内实现。 我认为这是因为insert使用了broken_min,然后必须进行更多检查以确定它是否具有最大值。
这是正确的推理吗?
答案 0 :(得分:0)
是的,我相信你是对的。
优先级队列通常实现为heap:
堆是一种专门的[二元]树基于数据的结构......父节点的密钥小于或等于子节点的密钥,最低密钥位于根节点(最小堆)中。 / p>
broken_min
可以在O(1)中实现,因为其中一个子元素将是第二大元素,因此我们可以检查它们。
但是insert
将取Ω(log n),这不是o(log n)(但确实是O(log n))。
我怀疑你会找到一个能够满足给定运行时间的优先级队列实现,但是说它不可能是不负责任的。
注意:我认为你的意思是小-o(一个严格的上限,而不是big-O,这是一个大于或等于上限)给定标签,虽然大 - 大部分时间都使用了O,而且几乎没有使用过o(就我所见)。