尝试了解最小最大堆的删除最小

时间:2018-12-21 17:26:14

标签: algorithm pseudocode

我想了解最小-最大堆删除过程的工作原理,我已经搜索了它的伪代码,但一无所获,看来我不能在这里询问伪代码了。这是我的问题

g0

任何人都可以展示“删除最小元素7”的逻辑,至少让我知道伪代码“感觉如何”吗?


编辑:如果有人认为我没有尝试,这里是另一张幻灯片:

  1. [1.1] 我不明白:

      

    (第4行): ...,然后重新插入到最小-最大堆中。

    这里的“ 重新插入 ”是在调用原始插入过程吗?还是仅代表后续案件?

    [1.2]

      

    (第8行):最小-最大堆中的最小键是根的子代或孙代之一。

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

    幻灯片:g1


我可以理解插入过程中使用的“ VerifyMax”过程,不确定该过程是否将用于删除...:

enter image description here

3 个答案:

答案 0 :(得分:1)

该算法“感觉像”普通最小堆的DeleteMin过程(或最大堆的DeleteMax过程):

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

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

答案 1 :(得分:0)

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

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

  3. 将“ 90”与“ 70”交换为最大堆属性。

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

答案 2 :(得分:0)

现在,当我了解最小-最大堆之后,我现在很确定会感到困惑:

  1. 这与原始的insert最小/最大堆方法

  2. 不同
  3. 它的确切含义是孙子,而不是递归的。由于孙子处于最低级别。