如何删除最大堆中的最小密钥?

时间:2013-02-19 05:04:22

标签: heap max-heap

我需要实现一个函数HEAP-DELETE-MIN(Array)来删除最大堆中的最小整数。我不是要求功能本身,但有人可以提供一些伪代码来帮助我开始吗?这将是一个很大的帮助。该数组应该在函数末尾保持最大堆。

1 个答案:

答案 0 :(得分:5)

基本上,您需要搜索存储在数组中的隐式堆的所有叶节点。它将是堆的叶子节点,因为它的父节点必须大于它(最大堆属性),并且我们知道叶子是从索引n / 2和更远的地方存储的(尽管这不会损害我们的算法复杂性)。基本上你应该做的是以下几点:

1) Search the array for the minimum element
2) Place the last-inserted heap element in the position of the minimum element (essentially this is the delete)
3) Upheap the replaced node to restore maximum heap property and correct storage of the heap in the array

这将需要O(n)来搜索最小元素,然后是O(1)用于交换,最后是O(log n)用于upheap。总的来说,这是线性时间,基本上是你能做的最好的。

记住要小心索引操作,2 * i是节点i的左子节点,2 * i + 1是基于数组的堆中节点i的右子节点(假设数组的第0个元素总是为空且堆的根位于索引1)