MinHeap删除理解

时间:2018-10-10 16:20:40

标签: algorithm data-structures heap

我很难理解我的教授给我的有关堆的问题之一的解决方案。

  

给出例程Min-Heap-Delete(A,k)的伪代码。假设密钥k在位置l   堆的1≤l≤n。

我的解决方法是

  

将A [k]与A [A.size()-1]

     

A.size()= A.size()-1

     

Min-heapify(A,k)

但是,我的解决方案与第一部分的教授有所不同。

  
    

将A [k]与A [A.heap_size()]

         

A.heap_size()= A.heap_size()-1

  
     

Min-heapify(A,k)

我们为什么要使用A.size()而不是A.size()-1?因为堆从索引1开始,A.size()不会在代表堆的数组上建立索引吗?

enter image description here

在这种情况下,A.size()将给我们10。但是,A [10]不存在,并且会导致错误。因此,为什么不使用A [10-1]获取堆树中的最后一个节点?

1 个答案:

答案 0 :(得分:2)

因为教授使用的是从1开始的计数,而不是从零开始的计数。注意-bitexact条件。您可能会错过索引是A。 heap_size -堆大小而不是数组大小,因此最后一个元素将称为1 ≤ l ≤ n

这是相当普遍的做法,并且对于堆来说很方便,因为子/父索引关系看起来非常简单:

A[9]

请注意,图片中的数组实际上是基于zeo的,未使用零条目