凸多邊形最優三角剖分的兩種演算法分析

2021-07-29 16:23:40 字數 2142 閱讀 8226

/*

name:

author: 巧若拙

date: 27-03-17 10:11

description: 動態規劃--凸多邊形最優三角剖分

題目描述:

用多邊形頂點的逆時針序列表示凸多邊形,即p=表示具有n條邊的凸多邊形。

給定凸多邊形p,以及定義在由多邊形的邊和弦組成的三角形上的權函式w。要求確定該凸多邊形的三角剖分,

使得即該三角剖分中諸三角形上權之和為最小。

解題思路:

若凸(n+1)邊形p=的最優三角剖分t包含三角形v0vkvn,1≤k≤n-1,則t的權為3個部分權的和:

三角形v0vkvn的權,子多邊形和的權之和。

可以斷言,由t所確定的這2個子多邊形的三角剖分也是最優的。

因為若有或的更小權的三角剖分將導致t不是最優三角剖分的矛盾。

那麼我們定義乙個m[i][j],0<=i<=j1時,凸子多邊形至少有3個頂點。

由最優子結構性質,m[i][j]的值應為m[i][k]的值加上m[k][j]的值,再加上三角形vivkvj的權值,其中iusing namespace std;

int minweighttriangulation(int i, int j);//自頂向下,使用備忘錄陣列的動態規劃演算法

int minweighttriangulation_2(int n);//自底向上的動態規劃演算法

int getweight(int i, int k, int j);//計算三角形的周長

void printtriangulation(int i, int j); //輸出組成最優解的各個三角形的周長

const int n = 6;

int w[n][n] = ,,,

,,

};//圖的鄰接矩陣

int m[n][n]; //m[i][j]表示多邊形的最優權值

int s[n][n]; //s[i][j]記錄vi-1到vj最優三角剖分的中間點k

int main(int argc, char **argv)

int minweighttriangulation(int i, int j)//自頂向下,使用備忘錄陣列的動態規劃演算法

具有權值為0,那我們在考慮最優解時,就不需要從頂點v0開始,而是從頂點v1開始,這樣要計算的凸(n+1)邊形p的最優權值為m[1][n]。

需要注意的是,我們在求m[i][j]的時候,是取頂點vi-1為起點的,所以計算三角形的權之和(周長)時,我們計算的是getweight(i-1, k, j)。這和演算法1是不一樣的。

總的來說,演算法1直觀,演算法2 簡潔。

#includeusing namespace std;

int minweighttriangulation(int i, int j);//自頂向下,使用備忘錄陣列的動態規劃演算法

int minweighttriangulation_2(int n);//自底向上的動態規劃演算法

int getweight(int i, int k, int j);//計算三角形的周長

void printtriangulation(int i, int j); //輸出組成最優解的各個三角形的周長

const int n = 6;

int w[n][n] = ,,,

,,

};//圖的鄰接矩陣

int m[n][n]; //m[i][j]表示多邊形的最優權值

int s[n][n]; //s[i][j]記錄vi-1到vj最優三角剖分的中間點k

int main(int argc, char **argv)

int minweighttriangulation(int i, int j)//自頂向下,使用備忘錄陣列的動態規劃演算法

{ if (m[i][j] != 0) //預設為0

return m[i][j];

if (i == j)

return 0;

//先處理k=i的情形,注意我們取頂點vi-1為起點

m[i][j] = minweighttriangulation(i+1, j) + getweight(i-1, i, j); //minweighttriangulation(i, i)==0,就不寫了

s[i][j] = i;

//再處理i

凸多邊形最優三角剖分

問題描述 使用動態規劃演算法解凸多邊形最優三角剖分問題,具體來說就是,依據遞迴式,按照順序求得子問題,使得該三角剖分中諸三角形上權之和為最小。輸入形式 在螢幕上輸入凸多邊形頂點個數和頂點座標。輸出形式 最優三角剖分後的三角形頂點。樣例輸入 8 26 0 20 0 10 10 0 22 12 27 2...

凸多邊形的最優三角剖分

如圖所示,用頂點的逆時針序列表示凸多邊形,即p 表示具有n條邊的凸多邊形。給定凸多邊形p,以及定義在由多邊形的邊和弦組成的三角形上的權函式w。如圖所示劃分,要求確定該凸多邊形的三角剖分,使得該三角形上的勸之和最小。解析 若凸 n 1 邊形p 的最優剖分t包含三角形v0vkvn,1 k n 1,則t的...

4 5 凸多邊形最優三角剖分

動態規劃法解凸多邊形最優三角剖分 1 凸多邊形的三角剖分 將凸多邊形分割成互不相交的三角形的弦的集合t。2 最優剖分 給定凸多邊形p,以及定義在由多邊形的邊和弦組成的三角形上的權函式w。要求確定該凸多邊形的三角剖分,使得該三角剖分中諸三角形上權之和為最小。定義乙個頂點到其他頂點的權 weights ...