在空间数据库中查找K个最接近的对(没有特定的查询对象)

时间:2018-07-31 13:54:11

标签: multidimensional-array spatial knn spatial-query spatial-index

输入:

N分{P1,…。 ,Pn} -每个点都来自相同的尺寸t:

  • Pi = {x_1,…。,x_t},其中k在18-30之间。

距离函数-dist(Pi,Pj)-返回一个数字,即点之间的距离。 (该函数是自定义函数,不是标准的Minkowski距离)。

问题:

主要问题:

  • 尽快从所有N个点中找到K个最接近的对。

次要问题:

  • 给出一个点Q = {x_1,…,x_t},返回K个最接近的对。

很高兴:

  • 我们可以在其中添加/删除点Pi的数据库,并且上述查询将尽快运行。

相关数据结构:

KD-TREE

R-TREE

球树

可能的解决方案:

主要问题:

  • 构建BallTree(sklearn.neighbors.BallTree)。

  • 对于BallTree中的每个点P,找到K个最接近的对(现在我们有N个List,其中每个列表都包含每个Point Pi的K个最接近的对)。

  • 从上面的所有列表中获取最佳的K对。

次要问题:

  • 构建BallTree(sklearn.neighbors.BallTree)。

  • 查询给定点Q的最近k对。

到目前为止,

时间复杂度:

  • 对于树中的每个点(总共N个),找到K个最接近的对,它们取O(K * log(N))-所以总共O(N * K * log(N))

  • 从N个排序列表中选取最佳的K对-可以采用 O(Max {K * log(K),N})。例如,保持最小HEAP为K。

目前总复杂度为 O(N * K * log(N))-我们可以做得更好吗?

0 个答案:

没有答案