这可以在 O(kn^3) 时间和 O(kn^2) 空间内完成(如果您想要实际点,则可能是 O(kn^3) )。
这张纸:http://www.win.tue.nl/~gwoegi/papers/area-k-gons.pdf http://www.win.tue.nl/~gwoegi/papers/area-k-gons.pdf
Eppstein 等人提出的算法可以解决最小周长和其他权重函数(如面积、内角总和等)的问题,这些函数遵循一定的约束,即使标题说的是最小面积(周长请参见推论 5.3)。
基本思想是如下的动态规划方法(阅读第 4 节的前几段):
假设 S 是给定的点集,Q 是 k 个点的具有最小周长的凸包。
令 p1 为 Q 的最底点,p2 和 p3 为船体上按逆时针顺序排列的下一个点。
我们可以将 Q 分解为三角形 p1p2p3 和 k-1 个点 Q' 的凸包(与三角形 p1p2p3 共享边 p1p3)。
主要观察结果是 Q' 是 k-1 的最优值,其中最底点是 p1,下一个点是 p3,并且 Q' 的所有点都位于线 p2->p3 的同一侧。
因此,为每个四元组 (pi, pj, pk, m) 维护一个最佳多边形的 4d 数组,使得
- 该多边形是 S 的 m 个点的凸包。
- pi 是多边形的最底点。
- pj 是逆时针顺序的下一个顶点,
- 多边形的所有点都位于 pi -> pj 线的左侧。
- 所有点都与 pi 位于 pj->pk 的同一侧。
给定 m
该论文准确地描述了如何做到这一点以实现规定的空间和时间限制。
希望有帮助。