gpt4 book ai didi

algorithm - 最小-最大堆中的删除-最大操作

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:48:58 28 4
gpt4 key购买 nike

我正在实现一个最小-最大堆,一种双端优先级队列。你可以看这里here有关最小-最大堆的更多信息。

插入和删除最小操作的代码很简单,可以在网上找到。但是,我也在尝试在最小-最大堆上实现 delete-max 操作。

最初,我觉得 delete-max in min-max heap 和 delete-max in max-min heap 是一样的(如果我们考虑包含最大元素的 min-max 堆子树,它类似于一个 max-min堆)。因此,实现将很简单,类似于最小-最大堆的 delete-min。

但是,有一个问题: enter image description here

从上图可以看出,虽然70是max元素,但是min-max堆的最后一个元素(12)不在包含70的子树中。那么,我可以用它来代替左子树删除70后留下的空位?

如果我们不使用该元素而是按照最大最小堆的删除最大程序并使用20来替换间隙,则插入堆中的下一个元素将在右 child 10 岁,永远不会有 9 岁的 child 。

那么,有人能帮帮我吗?

最佳答案

我认为删除最后一层最右边的节点并用它来替换被删除的最大元素是正确的,即使它在树中交叉。理由如下:

  1. 移除最后一层中最右边的节点不会改变该树中任何节点需要保持的任何不变量:最小层级的所有节点仍然小于它们的所有后代,并且所有最大级别的节点仍然大于它们的后代。

  2. 该树仍然是一棵完全二叉树。

一旦你移动了这个节点,你就可以在最大-最小堆中使用正常的修复过程,以确保左子树不变量仍然成立。

希望这对您有所帮助!

关于algorithm - 最小-最大堆中的删除-最大操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14332279/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com