成对最近邻居搜索的高效算法

时间:2019-02-07 15:29:00

标签: algorithm time-complexity nearest-neighbor

假设我在R^(n * d)个数据点的n中有一个数据集,每个数据点的维度为d。我想计算它们之间每个k点的n个最近邻居,从而得出每个N^(n*k)个最近邻居的索引k个矩阵n分。 注意 这对于普通的最近邻居搜索是不同的,因为我们无需计算任意任意点的最近邻居,而只需在原始{ {1}}训练数据。

我可以想到几个简单的实现。

首先,在每个点执行linear search要求每个点n,这在整个数据集中变成~ O(n),这非常慢。显然,这差不多等于简单地构造成对距离矩阵也是~ O(n^2)

第二,我们可以构建一个ball tree,它需要~ O(n^2)来构建,并且每个点~ O(n log n)来计算最近的邻居。执行~ O(log n)这样的计算本身需要n,因此整个过程为~ O(n log n)。但是,球树的目的是对任意输入执行最近的邻居搜索,因此当我们只希望原始训练点的最近邻居时,它似乎“太强大”。

是否有可能同时对所有点执行上面的线性搜索,为整个问题制定一个~ O(n log n)算法?还是O(n)是我们在这里能做的最好的事情。

0 个答案:

没有答案