在给定一组点的情况下找到最大面积k-gon

时间:2016-10-04 12:09:47

标签: algorithm geometry

我试图解决topcoder竞技场中的练习题:http://topcoder.bgcoder.com/print.php?id=417

根据我的理解,问题的目的是找到最大面积的k-gon,给定一组点D并且k <= n,n是固定值。

让凸壳为D = C(D)

如果n = 3,我已经证明可以通过假设它的顶点是C(D)的子集来构造这样的三角形。 因此,很容易想出k = 3的解决方案:https://stackoverflow.com/a/1621913/4126652

然而,对于n> 3,我不知道如何做到这一点。

以下是我的尝试:

设| C(D)| = l即凸壳是l-gon,

如果n>我很确定具有最大面积的k-gon本身就是凸包,即C(D)

如果n&lt;我很确定最大k-gon的顶点将是C(D)的子集,我无法证明它对于k> 3,并且我无法提出算法来解决,即使这是一个正确的假设。

任何人都可以帮助我吗,我的方法是否正确?你能帮我进一步吗?

1 个答案:

答案 0 :(得分:1)

在我的脑袋里摔了几个小时之后,我找到了解决办法。

这是一个动态编程问题:

设dp [m] [o] [r]表示最大面积r-gon,使得起始顶点为m,结束顶点为o(顶点采用循环顺序)。

然后递归关系将是:

dp [m] [o] [r] = max(dp [m] [n] [r-1] + area(m,n,o)),{max over n:m&lt; n&lt; o}

其中area(m,n,o)是由顶点m,n和o形成的三角形区域