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

kd-tree:重复的密钥和删除

如何解决kd-tree:重复的密钥和删除

在这slides(13)中,描述了删除kd树中的点:它指出,如果删除的节点只有左子树,则可以将左子树交换为右子树。 。然后可以找到最小值并递归删除它(就像使用右子树一样)。

这是因为具有与当前尺寸相同的键的kd树应位于右侧。

我的问题:为什么相等的关键点必须是父点的正确子代?另外,如果我的kd-tree算法返回的树在左侧具有相同的关键点,会发生什么情况?

例如: 假设数据集(7,2),(7,4),(9,6) 生成的kd树将被(相对于一个轴排序):

     (7,2)
    /     \ 
  (7,4)   (9,6)

陈述相同理论的另一个来源是this(示例15.4.3上段)

请注意,只有在存在正确的子树的情况下,才可以用右侧子树中值最小的节点替换要删除的节点。如果没有,则必须在左侧子树中找到合适的替换项。不幸的是,用左子树中具有最大鉴别值的记录替换N的记录并不令人满意,因为这个新值可能会重复。如果是这样,那么我们在N的左子树中的鉴别符将具有相等的值,这违反了kd树的排序规则。幸运的是,有一个简单的解决方案。我们首先将节点N的左子树移动为右子树(即,我们仅交换N的左右子指针的值)。在这一点上,我们继续进行正常的删除过程,将要删除的N记录替换为包含现在N的右子树中标识符最小的记录。

两者都指的是仅具有左子树的节点,但是为什么会有什么不同呢? 谢谢!

解决方法

没有硬性规定要求仅在右侧具有相等的键。您也可以将其更新为左侧。

但是,这样做还需要更新搜索和删除操作的算法。

看看这些链接:

https://www.geeksforgeeks.org/k-dimensional-tree/

https://www.geeksforgeeks.org/k-dimensional-tree-set-3-delete/

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?