我最近参加考试是有问题说:你的朋友想出了为执行以下操作的优先级队列中的一套算法:Insert(S, x)
在O(1)
,在O(1)
Peek-Max(S)
,Remove-Max(S)
在O(1)
,以及Increase-Key(S, x, k)
的O (logn)
。你如何向你的朋友证明这套算法是不可能的?证明 - 优先级队列操作的时间复杂度
我一直很紧张,因为我是积极的我得到了错误的答案。我说一个优先级队列必须具有这样的属性,对于一组元素[A1, A2, ... An]
,它需要具有我现在认识的不正确的关系[A1 >= A2 >=...>= An]
。只有第一个元素需要比其他元素更大(假设最大优先级队列)。因此,插入功能不能在O(1)中,因为对于一组n个元素,您无法确保放置的物品在固定时间内处于适当位置。
对于如何解决这个问题,你们有没有什么见解?昨晚我睡不着觉得我可能错了这个问题。
我们可以插入一个具有预定优先级值的元素,还是我们必须使用'Increase-Key'来增加已存在于队列中的元素的优先级? “Increase-Key”到底做了什么? – kevchoi