假设我有一个优先级队列,它按递增顺序删除元素,并且存储在此队列中的是元素1, 1, 3, 0, 1
。增加的顺序为0
,然后是1
,然后是3
,但有三个元素1
。
当我致电remove
时,它会先删除0
,但如果我再次拨打remove
,它会同时删除所有三个1
,或者我需要分别致电remove
三次以删除所有1
元素。
在这样的优先级队列上调用remove
会删除所有相同最小值的元素,还是每次调用只删除一个元素?
答案 0 :(得分:3)
在优先级队列中,删除操作通常会删除包含最大值的单个记录。所以在你的情况下,它将是第二种选择。删除顺序无法保证。任何具有“最大”值的键都将被删除。另外,未排序的数组是实现优先级队列的错误数据结构。您通常会使用堆数据结构来获取插入和删除时的O(log(n))保证。
答案 1 :(得分:0)
典型的堆实现总是会重新使用树,因此它会删除0,1,1,1和3,因为1会在重新调整过程中被推送到根目录。
我错了吗?编辑:你的案例是一个小堆