【问题标题】:Proving priority queue operations time complexity证明优先队列操作的时间复杂度
【发布时间】:2016-02-19 01:59:51
【问题描述】:

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

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

你们对如何解决这个问题有任何见解吗?我昨晚睡不着觉,以为我可能答错了这个问题。

【问题讨论】:

  • 我们可以插入一个具有预定优先级值的元素,还是我们必须使用Increase-Key来增加队列中已经存在的元素的优先级? Increase-Key 到底是做什么的?

标签: algorithm time-complexity priority-queue


【解决方案1】:

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

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

【讨论】:

  • 这很有意义。我想吐,我希望我得到部分功劳
猜你喜欢
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多