【问题标题】:Nearest Neighbor 3D w/ Delete & Add Operations带删除和添加操作的最近邻 3D
【发布时间】:2017-09-27 22:15:49
【问题描述】:
是否存在支持删除和添加操作以及精确最近邻查询的最近邻数据结构?寻找理想的 Python 实现。
尝试:
- 在高维空间中找到了许多近似最近邻查询的实现。
- 找到了 KD 树和球树,但它们不允许动态重新平衡。
- 使用局部敏感散列可以考虑一种算法。
- 查看 OctTrees。
上下文:
- 对于 10,000 个点中的每个点,查询它的最近邻
- 评估每对邻居
- 选择一个并删除这对点并添加一个合并点。
- 重复一些迭代次数
【问题讨论】:
标签:
python
algorithm
data-structures
nearest-neighbor
【解决方案1】:
是的。存在这样的数据结构。我发明了一个。我手头正好有这个问题。数据结构使 KD 树看起来过于复杂。它仅由点所具有的每个维度中的点的排序列表组成。
显然,您可以从按其各自维度排序的 n 个列表中添加和删除一个 n 维点,这很简单,没有问题。许多技巧可以让你迭代这些列表,并在数学上证明你到一个点的距离最短。有关详细说明和代码,请参阅我的回答 here。
我必须指出,您的上下文是错误的。 A 的最近点可能是 B,但它并不认为 B 的最近点一定是 A。您可以装配一系列点,使每个链接之间的每个距离都小于之前的一个,但也必须比另一个更远点导致只有一对邻居共享他们最近的邻居。