微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

证明或反对将两个最小值添加到 B 树然后删除它们

如何解决证明或反对将两个最小值添加到 B 树然后删除它们

我遇到了一个问题,但我不确定正确答案:

我们在 B 树中插入两个新的最小值 wz,用 w > z -- 首先我们插入w,然后是x。紧接着我们按照相同的顺序删除它们。原来的 B 树结构保持不变,还是我们在树中得到了不同的顺序?

解决方法

不保证 B 树保持不变。如果删除以与插入相反的顺序发生,则可以保证,但如果顺序是:

  • 插入w
  • 插入z
  • 删除w
  • 删除z

...那么这取决于实现选择,特别是如何处理发生在非叶节点中的值的删除。

这是一个反例2-3 tree,即3阶B树:

       [5,-]   
      /    |
   [4,-] [6,7]   
 

所以我们有一个(分隔符)值为 5 的根和一个空槽。有两片叶子:第一片叶子被填充了一半,值为 4,而右边的叶子完全被值 6 和 7 占据。

现在让 w=2 和 z=1。

在我们插入 2 之后,我们得到了这棵树——没有什么特别的事情发生:

       [5,-]   
      /    |
   [2,4] [6,7]   

然后,要插入 1,我们必须拆分最左边的叶子,并将 2 作为分隔符值移动到父节点:

       [2,5]   
      /    |    \
   [1,-] [4,7]   

现在我们进入关键部分:删除 2 给了我们一个选择。 Wikipedia 描述该选择如下:

选择一个新的分隔符(左子树中最大的元素右子树中最小的元素),将其从它所在的叶节点中移除,并用新的分隔符替换要删除的元素。

如果我们选择 second 选项,那么这意味着我们选择 4 作为新的分隔符值来替换值 2。这给了我们以下中间情况:

       [4,-] [-,7]   

中间的空叶子是下溢的,所以我们尝试旋转。我们必须对右边的邻居执行旋转,因为另一个没有足够的值,所以我们向上移动 6,向下移动 5:

       [4,6]   
      /    |    \
   [1,-] [5,-] [7,-]   

...树又有效了。但是,...它不是原来的树。

所以,这个反例足以证明谓词是假的。

但是,如果有额外的信息表明算法总是采用first替代方法来删除内部值,那么谓词似乎为真。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。