2017-07-29 73 views
-1

我需要设计一个最小/最大优先级队列 插入,删除最大值,并删除最小值(全部在对数时间内); 并找到最大值并找到最小值(均在常量时间内)。设计最小/最大优先级队列

+2

你熟悉如何设计一个常规的最大堆?你认为你可以使用一个(或两个)来实现你的DS吗? – amit

+0

是的,我熟悉设计一个最大堆。 –

+0

我们可以使用2堆? –

回答

0

方法1:

由于amit,带领你通过讨论,维护两个堆和记住指针元素。

方法2:(优于)

有用于此目的的数据结构特异性。它叫Min-Max Heap。类似地,也有相同规格的Max-Min Heap。

规格是按照你想要的东西:

1)插入 - O(LOGN)

2)DeleteMin - O(LOGN)

3)DeleteMax - O(LOGN )

4.)创建 - O(n)的

5.)FindMin - O(1)

6)FindMax - O(1)

一些参考:

Min-Max Heap

How to perform a general deletion operation on a min-max heap?