我想了解最小-最大堆删除过程的工作原理,我已经搜索了它的伪代码,但一无所获,看来我不能在这里询问伪代码了。这是我的问题
任何人都可以展示“删除最小元素7”的逻辑,至少让我知道伪代码“感觉如何”吗?
编辑:如果有人认为我没有尝试,这里是另一张幻灯片:
[1.1] 我不明白:
(第4行): ...,然后重新插入到最小-最大堆中。
这里的“ 重新插入 ”是在调用原始插入过程吗?还是仅代表后续案件?
[1.2]
(第8行):最小-最大堆中的最小键是根的子代或孙代之一。
我不确定“ 孙子 ”是否递归包括他们的孙子。
幻灯片:
我可以理解插入过程中使用的“ VerifyMax”过程,不确定该过程是否将用于删除...:
答案 0 :(得分:1)
该算法“感觉像”普通最小堆的DeleteMin过程(或最大堆的DeleteMax过程):
TrickleDown稍微复杂一点,但不多:您需要检查最小和最大关系。通常,这是通过检查点滴元素的子代和子代来完成的。
答案 1 :(得分:0)
将“ 7”替换为“ 90”(用最后一个元素替换min元素),并减小min-max堆的大小。
将“ 90”替换为“ 9”(因为这是现在的最小值)。现在“ 9”是根。
将“ 90”与“ 70”交换为最大堆属性。
因为违反了最小堆属性,所以将“ 70”替换为“ 20”。这是最终结果。
答案 2 :(得分:0)
现在,当我了解最小-最大堆之后,我现在很确定会感到困惑:
这与原始的insert
最小/最大堆方法
它的确切含义是孙子,而不是递归的。由于孙子处于最低级别。