【问题标题】: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给定 2D 平面中的 N 个点,确定是否有一条线将它们分成两组 N / 2 个点 + 更多规则
【发布时间】:2021-05-10 01:36:26
【问题描述】:

给定 2D 平面上的 N 个点,确定是否有一条线将它们分成两组,每组 N / 2 个点。

还有两条规则:

  • 每组点到这条线的距离总和应该相同。
  • 线不能通过任何点。

附加(不确定是否有帮助): 我们可以假设N 很大(~100k); -2000

你们对这个问题有什么见解吗?我真的尝试了很多东西,但我相信我应该使用某种相等性,或者证明类似:sum(distancesSet1[i]) = sum(distancesSet2[i])。 如果你愿意,我也可以在这里发布我尝试过但失败(或者我认为失败)的东西,但在此之前我想看看你的建议。

非常感谢!

#编辑: 对于这个问题,我需要知道的是,在给定 N 个点的集合的情况下,准确地说出它是否可能。

【问题讨论】:

  • 看到您的编辑后,我会将问题的标题更改为以下内容:“给定 2D 平面中的 N 个点,确定是否有一条线将它们分开(...) "
  • 我不太习惯堆栈溢出,谢谢建议。
  • 别担心,但你把它当真了!我写了“(...)”来代表问题的其余部分。重新完成标题可能是个好主意。
  • 我不确定这样做是否可行,但我想再次提出这个问题。有没有人有任何提示或您知道与解决这个问题有关的任何事情?
  • 这是一个想法:1)选择一个轴,例如X; 2)求中位数和平均值; 3)如果中位数和平均值之间没有点,那么有一条垂直于该轴的线穿过平均值并将这些点分开; 4)否则,尝试与其他轴相同。如果两者都失败,那么这条线可能仍然存在,但我不知道如何证明任何一种方式。希望这有助于作为一个开始。

标签: algorithm line computer-science computational-geometry point


【解决方案1】:

更新:这是试图回答最初的、更普遍的问题,即是否可以划分分数。

您的约束所定义的问题在数学上是无法解决的。您不能保证两组的距离总和相等。

你所需要的只是一个反例:

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

【讨论】:

  • 你将如何编写算法来说明它是否可能?我的意思是,这条线本身我不需要知道,只要有这条线是可能的。
猜你喜欢
  • 2015-11-12
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多