【问题标题】:How do you maximize distance between closest points in set?你如何最大化集合中最近点之间的距离?
【发布时间】:2021-09-30 08:32:31
【问题描述】:

我有一组二维点:(x1,y1) ... (xn,yn)。我喜欢将这些点分成两组,使每组中最近的一对点最大化。有算法吗?

澄清:每组中最近的一对点(都在同一组中)被最大化。所以它不是 k-means(它最小化了离集群中心最远的点)。

【问题讨论】:

标签: algorithm computational-geometry


【解决方案1】:

换种说法:如果可能,附近的点对应该放在相反的集合中。

我的建议是计算最小生成树(O(n log n),通过您最喜欢的 Delaunay 三角剖分算法),然后使用深度优先搜索 (O(n)) 对其进行双色处理。

这会最大化单个集合中两个最近点之间的距离。我们知道这个距离至少为 d,如果当我们提取所有比 d 更近的对时,结果图是二分图。如果您想象我们使用效率低下的 Kruskal 算法计算 MST,该算法按距离对边进行排序并按顺序考虑它们,那么希望清楚的是,该算法本质上是贪婪地尝试按顺序满足每个边的要求,只放弃当奇数循环即将形成时。

特别是,每个节点的最近邻居都在相反的集合中。

【讨论】:

  • 感谢这对我有意义。将取决于树中顶点的度数,但我认为这对这个应用程序非常有用。
  • @nickponline 如果需要余额要求,请联系我。
  • 理想情况下,拆分集的大小相同。
  • @nickponline 是准确的还是近似的?
  • 只有大约。
猜你喜欢
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 2020-01-26
  • 2017-02-24
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多