我有一个基于数组的二进制堆用于图搜索(虽然目的无关紧要) (索引0处的项目是堆的顶部。)
每隔一段时间,堆顶部的项目就会满足我正在寻找的标准,因此我将其弹出并保存以供日后使用。
目前,我只是将这些找到的项目放在一个单独的数组中并将它们返回给用户。
然而,我想知道:是否有任何有效的方法让我保留原始数组前面的项目,通过某种方式只需重新调整边界堆的“活动”部分以某种方式(即,将活动部分的起始边界移动一个元素)并一直持续到我完成为止?
天真地这样做会弄乱堆的结构。
答案 0 :(得分:0)
正常" pop"基于数组的二进制堆的操作将被删除的元素移动到数组的末尾(因此可以递减数组大小以将其删除),因此如果这是你想要的,你可以在那里跟踪它。实际上,使用基于数组的二进制堆,首先使用优先级函数将所有元素插入堆中,以使所需的最后一个元素具有最高优先级,然后弹出所有元素(将它们保留在数组的末尾)堆排序是如何工作的。