2010-11-20 149 views
3

假设我有一个优先级队列,它以递增的顺序移除元素,并且存储在这个队列中的元素是1, 1, 3, 0, 1。递增顺序是0然后1然后3,但有三个元素1 s。优先级队列数据结构

当我打电话remove它会先删除0,但如果我叫remove再次将它在同一时间删除所有三个1 S,或者我需要调用remove三个单独次,以去除所有的1元素。

在这样的优先级队列上调用remove是否删除所有具有相同最小值的元素,或者每次调用时只会删除一个元素?

+1

除非你说出你正在使用什么实现,否则不是一个真正的问题。 – 2010-11-20 03:59:37

+0

未分类数组 – user472221 2010-11-20 04:19:20

+0

“未分类数组”?在那种情况下,你正在自己实现数据类型,所以你可以决定你想要做什么...... – 2010-11-20 12:05:21

回答

3

在优先级队列中,通常删除操作将删除包含最大值的单个记录。所以在你的情况下,这将是第二种选择。不能保证移除的顺序。任何具有“最大”值的键都将被删除。另外,未分类数组是实现优先级队列的错误数据结构。您通常会使用堆数据结构来获取O(log(n))插入和删除的保证。

0

典型的堆实现总是reheap树因此将删除0,1,1,1,然后3为1将得到推动reheapification期间根..

我错了?

编辑:你的情况是最小堆