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

2021-10-01 18:15:05 字數 1500 閱讀 7219

動態規劃法解凸多邊形最優三角剖分

(1)凸多邊形的三角剖分:將凸多邊形分割成互不相交的三角形的弦的集合t。

(2)最優剖分:給定凸多邊形p,以及定義在由多邊形的邊和弦組成的三角形上的權函式w。要求確定該凸多邊形的三角剖分,使得該三角剖分中諸三角形上權之和為最小。

#定義乙個頂點到其他頂點的權

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]

]

weights是乙個鄰接矩陣,

求權值之和

#定義求三角形權之和的函式

def get_weight(i,j,k):

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]

]if k

return weights[i]

[j]+weights[j]

[k]+weights[k]

[i]

計算最優決策

def desicion(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

[j]:

m[i]

[j]=t

s[i]

[j]=k

return m,s

自底向上求取最優值

def max(i,j,s):

if i==j:

return

max(i, int(s[i]

[j]), s)

max(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]

))

凸多邊形最優三角剖分

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

凸多邊形最優三角剖分問題

參考書籍 演算法設計與分析 王曉東 動態規劃 1.問題描述 注 是所有的三角形的權值之和,不是只計算邊和弦的權值之和 2.分析 3.編碼實現 author 胡家威 createtime 2011 11 10 下午12 31 16 description 凸多邊形的最優三角剖分 packageex2 ...