algorithm - 在 O(nlogn) 中找到与一条线距离相同的所有点对

标签 algorithm divide-and-conquer

我正在尝试解决算法问题。我有 2 个数组,比如 A 和 B,其中包含一些点。 A和B的长度相同。我知道 A 和 B 中的所有点都是不同的。现在,我想找到与一条线距离相同的所有线对。还有一个规则。我无法同时比较 A 和 B 中的 2 个点。

如何在 O(nlogn) 中解决这个问题?我认为这是一个分而治之的问题,但我找不到解决方案。

提前致谢。

编辑:一个例子:

Line -> y=0
A = {(1,2), (3,4)}
B = {(1,-2), (3,-4)}
Output -> {{(1,2), (1,-2)}, {(3,4), (3,-4)}} 

EDIT2:假设所有距离也是不同的。

最佳答案

这是深奥的(禁止比较两点在这里看起来很傻) 具体问题 的变体。 O(NlogN) 解决方案可能使用类似快速排序的分区:

像这样制作比较函数:

float Compare(int A_Index, int B_Index)
   return Distance(line, A[A_Index]) - Distance(line, B[B_Index])

使用 Compare with a_idx 从 A.Partition B 数组中选择随机索引 a_idx。生成的枢轴 B[b_idx] 对应于 A[a_idx] 元素。现在根据 b_idx 对数组 A 进行分区。你有一对相等的元素和点的左右子数组,它们的距离越来越小。

对数组的两半重复,直到所有点都配对。

关于algorithm - 在 O(nlogn) 中找到与一条线距离相同的所有点对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46754020/

相关文章:

c++ - 用 vector 分而治之的最近点对

algorithm - 使用分治法的整数乘法算法?

algorithm - 重新排列奇数和偶数

algorithm - 什么是逆后序?

javascript - 过滤逻辑问题jQuery

arrays - 如何获得 3 维数组的所有 24 个旋转?

c# - 合并天际线,分而治之

algorithm - 如何使用分治法解决 "fixed size maximum subarray"?

algorithm - 有局限性的调度算法

python - 带有批量更新的 Welford 方差/标准算法的公式是什么?