【发布时间】: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