输入:
• N分{P1,…。 ,Pn} -每个点都来自相同的尺寸t:
•距离函数-dist(Pi,Pj)-返回一个数字,即点之间的距离。 (该函数是自定义函数,不是标准的Minkowski距离)。
问题:
•主要问题:
•次要问题:
•很高兴:
相关数据结构:
• 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))-我们可以做得更好吗?