你如何最大化集合中最近点之间的距离?

How do you maximize distance between closest points in set?

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

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

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

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

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

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