证明优先级队列操作时间复杂度

时间:2016-02-19 01:59:52

标签: algorithm time-complexity priority-queue

我最近参加了一个有问题的考试:您的朋友已经为优先级队列提出了一组算法,可以执行以下操作:Insert(S, x) O(1)Peek-Max(S)O(1)Remove-Max(S)中的O(1)和O Increase-Key(S, x, k)中的(logn)。您如何向您的朋友证明这套算法是不可能的?

我真的很紧张,因为我很肯定我得错了答案。我说优先级队列必须具有以下属性:对于一组元素[A1, A2, ... An],它需要具有我现在意识到的关系[A1 >= A2 >=...>= An]并不是真的。只有第一个元素需要大于其余元素(假设最大优先级第一优先级队列)。因此插入功能不能在O(1)中,因为对于一组n个元素,你无法确保放置的项目在恒定时间内处于适当的位置。

你们是否有任何关于如何解决这个问题的见解?我昨晚无法入睡,以为我可能错了这个问题。

1 个答案:

答案 0 :(得分:1)

一种反驳某事的简单方法是想一个反例。在这种情况下,您希望找到一系列明显不可能的操作。

例如,假设您将n元素插入队列,然后删除-max n元素。由于这是一个优先级队列,因此我们提取的元素应按排序顺序排列。因此,使用您朋友的算法,我们能够按时间复杂度nO(n)元素进行排序。我们知道排序最好是O(nlogn) - 在O(n)中排序是不可能的!