用m[i][j]表示Vi-1ViVj最优三角剖分权函数之和,i=j时表示一条直线段,将其看成退化多边形,权函数为0:
m[1][2]=m[2][2]+V0V1V2=0.0+5=5.0;
最优决策:s[1][2]=1.0
m[2][3]=m[3][3]+V1V2V3=0.0+8=8.0;
最优决策:s[2][3]=2.0
m[3][4]=m[4][4]+V2V3V4=0.0+9=9.0;
最优决策:s[3][4]=3.0
m[4][5]=m[5][5]+V3V4V5=0.0+9=9.0;
最优决策:s[4][5]=4.0
m[1][3]=m[2][3]+V0V1V3=8.0+10=18.0;
最优决策:s[1][3]=1.0
m[1][3]=m[1][2]+m[3][3]+V0V2V3=5.0+0.0+10=12.0;
最优决策:s[1][3]=2.0
m[2][4]=m[3][4]+V1V2V4=9.0+4=13.0;
最优决策:s[2][4]=2.0
m[2][4]=m[2][3]+m[4][4]+V1V3V4=8.0+0.0+4=21.0;
m[3][5]=m[4][5]+V2V3V5=9.0+8=17.0;
最优决策:s[3][5]=3.0
m[3][5]=m[3][4]+m[5][5]+V2V4V5=9.0+0.0+8=15.0;
最优决策:s[3][5]=4.0
m[1][4]=m[2][4]+V0V1V4=13.0+5=18.0;
最优决策:s[1][4]=1.0
m[1][4]=m[1][2]+m[3][4]+V0V2V4=5.0+9.0+5=18.0;
m[1][4]=m[1][3]+m[4][4]+V0V3V4=12.0+0.0+5=22.0;
m[2][5]=m[3][5]+V1V2V5=15.0+8=23.0;
最优决策:s[2][5]=2.0
m[2][5]=m[2][3]+m[4][5]+V1V3V5=8.0+9.0+8=27.0;
m[2][5]=m[2][4]+m[5][5]+V1V4V5=13.0+0.0+8=19.0;
最优决策:s[2][5]=4.0
m[1][5]=m[2][5]+V0V1V5=19.0+9=28.0;
最优决策:s[1][5]=1.0
m[1][5]=m[1][2]+m[3][5]+V0V2V5=5.0+15.0+9=30.0;
m[1][5]=m[1][3]+m[4][5]+V0V3V5=12.0+9.0+9=30.0;
m[1][5]=m[1][4]+m[5][5]+V0V4V5=18.0+0.0+9=24.0;
最优决策:s[1][5]=4.0
其他的讲解在书上和其他博客都有详细介绍,所以直把中间的过程表示出来,下面贴代码
import numpy
as np
n=
6
#顶点数
m=np.zeros((n,n))
#存放最优值
s=np.zeros((n,n))
#存放最优决策
#定义一个顶点到其他顶点的权
weights=[[
0,
2,
2,
3,
1,
4], [
2,
0,
1,
5,
2,
3], [
2,
1,
0,
2,
1,
4], [
3,
5,
2,
0,
6,
2], [
1,
2,
1,
6,
0,
1], [
4,
3,
4,
2,
1,
0]]
#定义求三角形权之和的函数
def get_weight(i,j,k):
if k
return weights[i][j]+weights[j][k]+weights[k][i]
#计算最优值并记录最优决策
def Minest_weight_val(n,m,s):
for i
in
range(
1,n):
m[i][i]=
0
s[i][i]=
0
for r
in
range(
2,n):
for i
in
range(
1,n-r+
1):
j=i+r-
1
m[i][j]=m[i+
1][j]+get_weight(i-
1,i,j)
s[i][j]=i
for k
in
range(i+
1,j):
t=m[i][k]+m[k+
1][j]+get_weight(i-
1,k,j)
if t
m[i][j]=t
s[i][j]=k
Minest_weight_val(n,m,s)
print(m)
print(s)
def Traceback(i,j,s):
if i==j:
return
Traceback(i,
int(s[i][j]), s)
Traceback(
int(s[i][j] +
1), j, s)
print(
'v'+
str(i-
1)+
',v'+
str(j)+
',v'+
str(s[i][j]))
print(
'此多边形的最优三角剖分值为:'+
str(m[
1][n-
1]))
print(
'最优三角剖分结构为:')
Traceback(
1,
5,s)