0

我有一个用于图形搜索的基于数组的二进制堆(尽管目的无关紧要)。
(索引 0 处的项目是堆的顶部。)

每隔一段时间,堆顶部的项目满足我正在寻找的标准,因此我将其弹出并保存以备后用。
目前,我只是将这些找到的项目放在一个单独的数组中并将它们返回给用户。

但是,我想知道:有什么有效的方法可以让我将项目保持在原始数组的前面,通过某种方式简单地以某种方式重新调整堆的“活动”部分的边界(即,移动起始边界一个元素的活动部分)并继续直到我完成?
天真地这样做会破坏堆的结构。

4

1 回答 1

0

基于数组的二进制堆的正常“pop”操作将要删除的元素移动到数组的末尾(因此可以减少数组大小以删除它),所以如果这是你想要的,你可以跟踪它在那里。实际上,使用基于数组的二进制堆,您首先使用优先级函数将所有元素插入堆中,以便所需的最后一个元素具有最高优先级,然后弹出所有元素(将它们留在数组的末尾)是堆排序的工作原理。

于 2014-07-14T00:01:29.523 回答