我想实现一个程序,将平面中的 n 个点的集合 S 分成两组,使两组凸包的距离最大化。
它应该在 O(n^3) 中完成。
我有几个想法,但我不确定它们是否正确:
1. 想法:我按 X 对点进行排序,然后为每两个点找到距离,但前提是它们之间没有任何其他点。然后我选择最接近左边第一个的点和最接近右边第二个的点(第一个点是第一个多边形的一部分,第二个是第二个多边形的一部分)。然后我找到点与线、线与线、线与点、点与点之间的距离(但我已经知道了)。这就是我找到最大距离的方法,然后使用格雷厄姆扫描创建一个凸包。我对 Y 重复所有内容,因为最大距离可能在 Y 上,而不是在 X 上。
2. 想法:我按 X 对点进行排序,然后为前 3 个点创建一个凸包,为其他点创建另一个凸包。然后找到这两个船体之间的最小距离。我保存了距离,如果它大于我在覆盖它并记住多边形之前保存的距离。最后一步是第二个凸包只剩下 3 个点。然后我为 Y 做所有这些步骤。
大家觉得我的想法怎么样?你有什么改进或者其他更好的主意吗?
