尝试理解 Min-Max Heap 的 delete-min

Try to understand delete-min of Min-Max Heap

我想了解min-max堆删除的过程是如何工作的,我已经搜索了它的伪代码但一无所获,而且我似乎不能在这里索取伪代码。所以这是我的问题

任何人都可以显示"delete of min element 7"的逻辑至少让我知道伪代码"feel like"如何?


编辑: 以防人们认为我什么都没尝试这里是另一张幻灯片:

  1. [1.1]没看懂:

    (4-th line): ... and then reinsert into the min-max heap.

    这里的“reinsert”是调用原来的插入程序吗?或者它只是指后面的案例?

    [1.2]

    (8-th line): The smallest key in the min-max heap is one of the children or grandchildren of the root.

    我不确定“孙子”是否递归地包含他们的孙子

    幻灯片:


我能看懂"VerifyMax"插入时使用的程序,不知道是否会用到删除中的程序...:[=​​15=]

算法"feels like"普通最小堆的DeleteMin过程(或最大堆的DeleteMax过程):

  1. 用堆中的最后一个元素替换当前的最小值(即堆中的第一个元素)。
  2. 将堆大小减一。
  3. 对第一个元素使用 TrickleDown 过程以恢复堆 属性。

TrickleDown 稍微复杂一些,但并不复杂:您需要检查最小和最大关系。通常这是通过检查 trickled 元素的子元素和孙元素来完成的。

  1. 将“7”替换为“90”​​(将最小元素替换为最后一个元素)并减小最小-最大堆的大小。

  2. 将“90”换成“9”(因为现在是最小值)。现在“9”是根。

  3. 将“90”替换为“70”,因为违反了最大堆 属性。

  4. 将“70”替换为“20”,因为违反了最小堆 属性。这是最后的结果。

现在我很确定理解最小-最大堆后的困惑:

  1. 和min-max堆原来的insert方法不一样

  2. 就是孙子的意思,不是递归的。由于孙子处于最低级别。