【发布时间】:2012-12-26 21:16:31
【问题描述】:
我正在尝试实现一个 Kd 树以在 C++ 中执行最近邻和近似最近邻搜索。到目前为止,我遇到了最基本的 Kd 树的 2 个版本。
它们似乎基本相同,具有相同的渐近特性。
我的问题是:有什么理由选择一个而不是另一个?
到目前为止,我想出了两个原因:
- 在节点中存储数据的树也浅了 1 级。
- 只在叶子中存储数据的树更容易
实现
delete data函数
在决定制作哪一个之前,我还应该考虑其他一些原因吗?
【问题讨论】:
-
@Boris Strandjev,谢谢!
-
为什么是第二个原因?我想即使使用第二种方法,您也可以在中间节点中存储一些距离数据?
-
@BorisStrandjev 在1.st的方法中,如果删除了一个节点,就需要找一个替换节点。这可以通过搜索以该节点为根的子树来实现。在 2. nd 方法中,您可以删除叶子
-
但是中间节点的数据还需要更新吗?
-
是的,这是更好、更勤奋的方法。但是第二棵树让您可以选择使用草率的方法,而不修改中间节点。
标签: c++ computer-science kdtree