寻求O(nlogn)alg用于计算坐标距离大于特定值的点对

时间:2016-01-31 04:15:10

标签: algorithm

给定输入n个点(x_i,y_i),其中x_i,y_i \在1..n \ forall i中。任何人都可以用构造O(nlogn)算法来计算点对(i,j)的想法,其中| x_i-x_j |> = a&& | Y_I-y_j |> = B。一个很好的假设可以是a = b = n / 2。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

首先,让我们尝试计算出| x_i-x_j |对的数量< a&& | Y_I-y_j | <湾按X坐标排序。现在按顺序处理点,并保持点的缓冲区| x_i-x_j | <一个。将每个点插入该缓冲区一次,然后从中移除一次。 从该坐标的内容中创建一个二叉树,在Y坐标上排序,并在树的该节点下面的每个节点处计数。因此,每次在该树中插入一个点时,您都​​可以计算出缓冲区中有多少点位于y方向的b内。

当然,只需将每个插入处的缓冲区大小相加即可告诉我们有多少对满足| x_i-x_j | < a,类似的过程将告诉我们有多少对满足| y_i-y_j | <湾

每一对都属于四个类别中的一个,我们现在已经足够了解它们。我们知道(X-cl​​ose和Y-close)的大小。我们知道X-close的大小,所以我们知道(X-cl​​ose但不是Y-close)的大小。类似地,我们知道Y-close的大小,因此我们知道(不是X-close但Y-close)的大小。这是四个可能类别中的三个,我们知道如果有N个点有N *(N-1)/ 2对,那么我们可以减去其他三个类别的大小来得到我们的大小(不是X) - 关闭而不是Y关闭),这当然是你要求的。