两组点之间的最近点

时间:2013-11-15 03:02:04

标签: algorithm geometry time-complexity

有两组点,表示集合A和B,并且对于集合A中的每个点a,尝试获得B的子集sub_B,即sub_B中的b与a之间的距离小于b之间的距离和任何其他A点。而且这一点是二维的。例如,A = {(0,0),(3,0)},B = {(1,1),(2,1)},然后对于A中的(0,0),其集合为{( 1,1)},对于A中的(3,0),其集合为{(2,1)}。显然,强力方法可以得到O(mn)的结果,其中m是A的大小,n是B的大小。我的问题是,是否有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

集合A中的所有点都可以排列成Space Paritioned Tree,并且B中的每个点都可以用作查询,以查找集合A中的最近邻居并获取具有最小距离的所有点集。这给出了使用kd树的O(N * log(N)+ M * log(N))解决方案。