尝试理解 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]没看懂:
(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过程):
- 用堆中的最后一个元素替换当前的最小值(即堆中的第一个元素)。
- 将堆大小减一。
- 对第一个元素使用 TrickleDown 过程以恢复堆 属性。
TrickleDown 稍微复杂一些,但并不复杂:您需要检查最小和最大关系。通常这是通过检查 trickled 元素的子元素和孙元素来完成的。
将“7”替换为“90”(将最小元素替换为最后一个元素)并减小最小-最大堆的大小。
将“90”换成“9”(因为现在是最小值)。现在“9”是根。
将“90”替换为“70”,因为违反了最大堆 属性。
将“70”替换为“20”,因为违反了最小堆 属性。这是最后的结果。
现在我很确定理解最小-最大堆后的困惑:
和min-max堆原来的insert
方法不一样
就是孙子的意思,不是递归的。由于孙子处于最低级别。
我想了解min-max堆删除的过程是如何工作的,我已经搜索了它的伪代码但一无所获,而且我似乎不能在这里索取伪代码。所以这是我的问题
任何人都可以显示"delete of min element 7"的逻辑至少让我知道伪代码"feel like"如何?
编辑: 以防人们认为我什么都没尝试这里是另一张幻灯片:
[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过程):
- 用堆中的最后一个元素替换当前的最小值(即堆中的第一个元素)。
- 将堆大小减一。
- 对第一个元素使用 TrickleDown 过程以恢复堆 属性。
TrickleDown 稍微复杂一些,但并不复杂:您需要检查最小和最大关系。通常这是通过检查 trickled 元素的子元素和孙元素来完成的。
将“7”替换为“90”(将最小元素替换为最后一个元素)并减小最小-最大堆的大小。
将“90”换成“9”(因为现在是最小值)。现在“9”是根。
将“90”替换为“70”,因为违反了最大堆 属性。
将“70”替换为“20”,因为违反了最小堆 属性。这是最后的结果。
现在我很确定理解最小-最大堆后的困惑:
和min-max堆原来的
insert
方法不一样就是孙子的意思,不是递归的。由于孙子处于最低级别。