kd-tree在内部节点中存储点?如果是,如何搜索NN?

时间:2014-04-10 13:05:58

标签: algorithm nearest-neighbor kdtree approximate-nn-searching

维基百科中的link关于kd-tree存储内部节点中的点。我必须执行NN查询,我(这里是新手),我理解这个概念。

然而,据说我从计算几何算法和应用程序(De Berg,Cheong,Van Kreveld和Overmars)研究Kd树,第99页第5.2节。我可以看到的主要区别是Overmars放置了分裂数据在内部节点和叶子中数据集的实际点。例如,在2D中,内部节点将保持分割线。

另一方面,维基百科似乎在内部节点和叶子中存储点(而Overmars仅存在于叶子上)。

在这种情况下,我们如何进行最近邻搜索?而且,为什么会出现这种差异?

1 个答案:

答案 0 :(得分:1)

默认的k-d-tree应该将数据集分割为一个点。然后将此点存储在内部节点上,并在搜索时沿着该树向下走时检查为邻居。

当然你可以有各种各样的kd-trees变体,其中split可能在不同的位置,当没有元素正好在分裂位置时,你不能再在内部节点中有一个。

此外,由于k-d-tree不是动态的,当通过墓碑模拟删除时,内部节点可能只包含一个墓碑(代表一个删除的对象)。