最小化凸多边形三角剖分对角线总和的算法?

时间:2015-11-29 21:40:55

标签: algorithm dynamic geometry triangulation convex-polygon

将三角测量的成本定义为已添加的对角线长度的总和。鉴于凸多边形,其最便宜的三角测量的成本是多少?如果我们将多边形视为一组n个坐标:v_1 = x_1,y_1,...,v_n = x_n,y_n并且解决方案必须具有n-3对角线(不重叠,因为它是三角剖分)

我一直试图解决这个动态编程问题,但我似乎无法找到一个好的。我没有真正认识到找不到复发的次优结构。有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法将遍历每个点,获取前一个点与下一个点之间的距离,并使用多边形递归而不使用当前点;例如对于五角大楼 abcde 将是:

  • 距离 eb +使用四边形递归 bcde
  • 距离 ac +使用四边形递归 cdea
  • 距离 bd +使用四边形递减 deab
  • 距离 ce +用四边形递归 eabc
  • 距离 da +使用四边形递归 abcd

recursive triangulation of pentagon

为了不多次计算相同的解决方案,您应该丢弃任何已经检查过的点没有对角线到达的解决方案;例如当在步骤3中使用quadrangle deab 递归时,具有对角线 eb 的解是重复的,因为已经检查了使用三角形 abe 的解决方案第一步。 使用这种方法可以使任何重复计算都不复杂。

另一种方法是选择一个点(在下图中以红色表示),然后将每个解决方案枚举为总和为 n - 2 ,其中n是点数。每个对角线通过所选点的解决方案将是解11111.然后,您将遍历总和为 n - 2 的每个组合:11111,1112,1121,113,1211,122,131, 14,2111,212,221,23,311,32,41和5.大于1的数字表示组合2个或更多个段,并从其第一个点到最后一个点添加对角线。当数字大于2时,此对角线会与一个左上方的多边形(以粉红色表示)相邻,然后再递归。

动画显示算法针对7点多边形进行的迭代和递归,直到它用6点多边形递归。

recursive triangulation of septagon

这两种方法都提供了记忆和制表的可能性,但它不会直截了当。一旦你开始递归,从b点开始的五边形不一定是 bcdef ;它可能是 bdfhj 。因此,检索存储的中间结果可能会有点复杂。