凸三角形最优三角剖分

问题相关定义:

     (1)凸多边形的三角剖分将凸多边形分割成互不相交的三角形的弦的集合T。

(2)最优剖分:         给定凸多边形P,以及定义在由多边形的边和弦组成的三角形上的权函数w。要求确定该凸多边形的三角剖分,使得该三角剖分中诸三角形上权之和为最小。  下图为剖分案例。

若凸(n+1)边形P={V0,V1……Vn}的最优三角剖分T包含三角形V0VkVn,1<=k<=n,则T的权为三个部分权之和:三角形V0VkVn的权,多边形{V0,V1……Vk}的权和多边形{Vk,Vk+1……Vn}的权之和。如下图所示:

可以断言,由T确定的这两个子多边形的三角剖分也是最优的。因为若有{V0,V1……Vk}和{V0,V1……Vk}更小权的三角剖分,将导致T不是最优三角剖分的矛盾。因此,凸多边形的三角剖分问题具有最优子结构性质。

3、递推关系:

     设t[i][j],1<=i<j<=n为凸多边形{Vi-1,Vi……Vj}的最优三角剖分所对应的权值函数值,即其最优值。最优剖分包含三角形Vi-1VkVj的权,子多边形{Vi-1,Vi……Vk}的权,子多边形{Vk,Vk+1……Vj}的权之和。

因此,可得递推关系式:

凸(n+1)边形P的最优权值为t[1][n]。

摘自:http://blog.csdn.net/liufeng_king/article/details/8639376

三角剖分的结构及其相关问题。

凸三角形的三角剖分与表达式的完全加括号之间具有十分密切的关系。 正如所看到的一样, 矩阵连乘的最优计算次序等价于矩阵链的最优完全加括号方式。其实更加奇妙的地方是, 这些问题似乎都是一个模子刻出来的! 其实本质原因就是因为它们所对应的完全二叉树的同构性。   一个表达式的完全加括号方式相应于一棵完全二叉树, 称为表达式的语法树。 而恰恰恰好的是, 凸多边形的剖分也可以用语法数表示。(请原谅“草滩小恪”画图功夫不行, 无法画出对应的图)

                模板主要代码:

//t[][] 记忆路径, s[][] 记录最优路径  W( , , )为权值函数
const int maxn = 100;
void minWeightTriangulation(int n, int t[][100], int s[][100])
{
    for(int i=1; i<=n; i++) t[i][i] = 0;
    for(int r=2; r<=n; r++)
    for(int i=1; i<=n-r+1; i++)
    {
        int j = i + r - 1;
        t[i][j] = t[i+1][j] + w(i-1, i, j);
        s[i][j] = i;
        for(int k = i+1; k<j; k++)
        {
            int u = t[i][k] + t[k+1][j] + w(i-1, k, j);
            if(u<t[i][j])
            {
                t[i][j] = u;
                s[i][j] = k;
            }
        }
    }
}

代码如有疑问可参见“矩阵连乘”。

时间: 2024-10-21 01:58:09

凸三角形最优三角剖分的相关文章

算法重拾之路——凸多边形最优三角剖分

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 第二章:动态规划 >凸多边形最优三角剖分< 算法描述: ? 多边形: 平面上一条分段线性闭曲线.即 一系列首尾相接的直线段所组成的. ? 通常用多边形顶点的逆时针序列表示 凸多边形,即 P = { v0,v1,...,vn-1 } 表示具有n条边,v0,v1,

算法设计与分析——凸多边形最优三角剖分

一.问题描述 多边形是平面上一条分段线性的闭曲线.也就是说,多边形是由一系列首尾相接的直线段组成的.组成多边形的各直线段称为该多边形的边.多边形相接两条边的连接点称为多边形的顶点.若多边形的边之间除了连接顶点外没有别的公共点,则称该多边形为简单多边形. 一个简单多边形将平面分为3个部分:被包围在多边形内的所有点构成了多边形的内部:多边形本身构成多边形的边界:而平面上其余的点构成了多边形的外部. 这里给出凸多边形的定义: 当一个简单多边形及其内部构成一个闭凸集时,称该简单多边形为凸多边形.也就是说

ZOJ - 3537 Cake (凸包+区间DP+最优三角剖分)

Description You want to hold a party. Here's a polygon-shaped cake on the table. You'd like to cut the cake into several triangle-shaped parts for the invited comers. You have a knife to cut. The trace of each cut is a line segment, whose two endpoin

Uva 1331 - Minimax Triangulation(最优三角剖分 区间DP)

题目大意:按照顺时针或者逆时针的顺序给出多边的点,要将这个多边形分解成n-2个三角形,要求使得这些三角行中面积最大的三角形面积尽量小,求最小值. 思路:用区间DP可以很方便解决,多边形可能是凹边形,注意剖分的三角形必须在多边形内部,所以可以去掉剖分的三角形中包含其他点,但是其他的在多边形外部的三角形没想到其他方法去除,却ac了,不懂为何 // Accepted C++ 0.042 #include<cstdio> #include<iostream> #include<alg

UVa 1331 最大面积最小的三角剖分

https://vjudge.net/problem/UVA-1331 题意:输入一个多边形,找一个最大三角形面积最小的三角剖分,输出最大三角形的面积. 思路: 最优三角剖分. dp[i][j]表示从i点到j点的最优值,枚举中间点k. 转移方程为dp[i][j]=min(dp[i][j],max(area(i,j,k),max(dp[i][k],dp[k][j]))). 如果三角形i-j-k中有其他的点,是不可以剖分的,需要去检验一下. 可以看一下大神的题解,写得很详细.http://www.c

DP——最优三角形剖分

[动态规划]凸多边形最优三角剖分 枚举三角行,再递归三角形旁边的两个多边形.

uva1331三角剖分

题意:输入一个简单m(2<m<50)边形,找到一个最大三角形最小的三角剖分(用不相交的对角线把一个多边形分成若干个三角形).输出最大的三角形面积. 分析:每条对角线都是无序的,因此,给节点编号,从1到n-1,顺时针方向,这样多边形的顶点都是有序的了,这样就可划分区间,类似区间dp来做. #include<bits/stdc++.h> using namespace std; const int maxn=55; const double inf=0x3f3f3f3f; const

牛人的ACM经验 (转)

一:知识点 数据结构: 1,单,双链表及循环链表 2,树的表示与存储,二叉树(概念,遍历)二叉树的 应用(二叉排序树,判定树,博弈树,解答树等) 3,文件操作(从文本文件中读入数据并输出到文本文 件中) 4,图(基本概念,存储结构,图的运算) 数学知识 1,离散数学知识的应用(如排列组合.简单的图论,数 理逻辑) 2,数论知识 3,线性代数 4,组合代数 5,计算几何 二 算法 1,排序算法(冒抛法,插入排序,合并排序,快速排 序,堆排序) 2,查找(顺序查找,二分发) 3,回溯算法 4,递归算

计算机图形学名词解释

转自 http://blog.csdn.net/lwfcgz/article/details/39254743 3D三维(three dimension).客观世界中静止的物体都是三维的,在计算机图形学中常在一定的坐标系中用(x,y,z)坐标系列表示物体. 3D modeling3D建模.用三维坐标来描述物体的形状.在各种计算机图形应用领域中有不同的三维建模方法,用不同的算法来描述这些领域中的物体和对象. 3D transformation3D变换.在三维空间中把物体的三维坐标从一个位置变换至另