一种寻找最近邻的有效算法

计算科学 算法 表现
2021-12-12 02:15:19

所以想象我有一个m向量每个维度d. 让我们打电话给他们,xi, 和i=1,2,3,4,5,,m. 现在的想法是找到的邻居xi(打电话给他们xj),在一个半径的球内r. 所以,

||xixj||r
.

笔记:||||是欧几里得范数。

天真地可以计算所有之间的距离j是针对特定的i, 然后对它们进行排序,只保留小于的元素r. 这对于大型计算来说是昂贵的md.

所以问题是我如何有效地计算邻居xj?

1个回答

我怀疑您可以利用以下事实来逃避信息的一部分

xixj=xixk+xkxjxixkxkxj.
您可以通过以下方式使用它:说,你想要r=1. 如果x1x2相距四个单位(不是邻居),并且x2x3距离一个单位,那么x1x3至少三个单位相距 - 也不是邻居。我不需要计算之间的距离x1x3来确定。

这意味着可以通过仅知道距离矩阵条目的子集来使用这种“反向三角不等式”来确定邻域

Dij=xixj.
问题是:您需要知道什么子集才能做出所有决定?如果确定最小子集的算法是 NP,我不会感到很惊讶,但人们可能会想出一种更便宜的算法,从Dij确定哪些条目不需要计算,然后计算其他一些当前未知的条目,并迭代直到每个条目D你要么计算了它的值,要么确定你不需要它。