algorithm - 两组点之间的最近点

标签 algorithm geometry time-complexity

有两组点,称集合A和集合B,对于集合A中的每个点a,尝试得到B的子集sub_B,即sub_B中b与a的距离小于b与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 的大小。我的问题是是否有更好的解决方案?

最佳答案

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

关于algorithm - 两组点之间的最近点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19992745/

相关文章:

c# - 是否有已知的算法来查找 N 个元素中哪 K 个元素的总和最接近整数?

c++ - 数组中最近点的索引,每个点包含3个元素

algorithm - K 个负边 - 单源最短路径

css - 盒子末端带有三 Angular 形的链接

algorithm - 最优二叉搜索树 - 时间复杂度

algorithm - 这个递归关系代表了什么样的算法?

java - 如何使用动态编程找到 Boggle board 上的所有单词?

java - 字符串的通用哈希函数

c++ - 给定一对 (lat,long) 和偏移纬度找到经度

math - 源自圆内的矢量圆上的交点