我谨kd树(2D)类,以便能够删除节点(分)。这除去应该进行没有必要重建大部分的树。算法中描述的这些 幻灯片, 上滑13似乎被什么我之后。然而,我麻烦了下面说明的"findmin()"上发现的滑7,这是利用在节点清除的算法。

的问题

  1. 什么是"我"的意思是在第二,最后一行的?(这也许是一个错误的作者,因为它是不引用其他地方?)

  2. 究竟什么是"whichAxis"?它的深度分裂的超平面我们想要得到最近的吗?

  3. 什么是"最低()",降低?我虽然这将是距离轴线,但是它看起来我喜欢的作者是尽量减少分,这没有道理我。

有帮助吗?

解决方案

(1)我 想想 是一个错误;我没有任何东西一样,在我执行它,并且它似乎正常工作(着名的最后一句话..).

(2) whichAxis 是的飞机,你是在寻找最低。因此,在两个维数据,这将是x或y。E.g。用点(20,40)和(40,20),一个是最低的,在x和y。当你开始寻找替换节点,你应该知道哪个分裂的飞机你要搜索。

(3)幻灯片写的是有点奇怪。你想要找到的最低价值,在适当的飞机。这也许会澄清一点(c#)。我的执行情况是数据集的使用 东和北移值 为x和y。minAxis仅仅是一个布尔,作为我只有两架飞机。

bool winner = minAxis ? (left.Easting < right.Easting) : (left.Northing < right.Northing);
return winner ? left : right;

...在哪里 是最小值递归搜索从左边和右边的孩子树的节点,我们是在。我可以后的全部功能,如果它让它更加清晰:-)

其他提示

如果你想删除nodeA在给定kd树

(1)如果nodeA是叶节点,只是让它空

(2)如果nodeA不是叶点

Assume nodeA split by x , you have two choice

1. find the largest nodeB (whose X is the largest) in left   
2. find the minimum nodeB (whoes X is the minimum) in right  (This pdf prefer it)

注:

如果你把nodeB等于nodeA下nodeA.对,你应该选择2

如果你把nodeB等于nodeA下nodeA.离开,你应该选择1

在这之后,替代nodeA与nodeB和删除nodeB。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top