![](/img/trans.png)
[英]Find two points in a given set of points in 2D plane with least distance in less than O(n^2) time
[英]Given N points in a 2D plane, determine if there is a line that divides them into two sets of N / 2 points each + some more rules
给定二维平面上的 N 个点,确定是否有一条线将它们分成两组,每组 N / 2 个点。
还有两个规则:
其他(不确定是否有帮助):我们可以假设N
很大(~100k); -2000 <= x[i], y[i] <= 2000
大家对这个问题有什么见解吗? 我确实尝试了很多东西,但我相信我应该使用某种相等性,或者证明类似:sum(distancesSet1[i]) = sum(distancesSet2[i])。 如果你愿意,我也可以在这里发布我尝试过但失败的东西(或者我认为它失败了),但在我想看到你的建议之前。
太感谢了!
#Edit:对于这个问题,我需要知道的是准确地说给定N个点的集合是否可能。
更新:这是试图回答最初的、更普遍的问题,即是否可以划分分数。
由您的约束定义的问题在数学上是无法解决的。 您不能保证两组的距离总和相等。
作为证据,你只需要一个反例:
S = [[-1000,0], [0,0], [1,0], [2,0]]
只有一种可能的组合来分隔这些对:
S1 = [[-1000,0], [0,0]]
S2 = [[1,0], [2,0]]
所有点都在线L1
上。 鉴于您的子弹#2,我们可以得出结论,将这些点分开的任何线L2
将形成角度t
wrt L1
。 那么距离的总和是:
sum1 = a*sin(t) :: 1000 < a < 1002
sum2 = b*sin(t) :: 1 < b < 3
t != 0
sum1 > sum2
QED
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.