小黑演算法成長日記3 矩陣最優乘法順序

2021-10-06 01:30:43 字數 2090 閱讀 2031

p =[30

,35,15

,5,10

,20,25

]def

function

(p):

n =len(p)-1

m =[[

0]*(n+1)

for i in

range

(n+1)]

#動態規劃最優乘法次數記錄表

s =[[

0]*(n+1)

for i in

range

(n+1)]

#矩陣劃分位置記錄表

for r in

range(1

,n):

#對角線垂直方向遍歷

for i in

range(1

,n):

#第r個對角線上位置進行遍歷

j = i + r

if j > n:

#該條對角線遍歷結束

break

m[i]

[j]= m[i]

[i]+ m[i+1]

[j]+ p[i-1]

*p[i]

*p[j]

s[i]

[j]= i

for k in

range

(i+1

,j):

temp = m[i]

[k]+ m[k+1]

[j]+ p[i-1]

*p[k]

*p[j]

if m[i]

[j]> temp:

m[i]

[j]= temp

s[i]

[j]= k

print

('m:'

)for i in

range(1

,n+1):

for j in

range(1

,n+1):

print

(m[i]

[j],end=

' ')

print()

print

('s:'

)for i in

range(1

,n+1):

for j in

range(1

,n+1):

print

(s[i]

[j],end=

' ')

print()

return s

s = function(p)

deftraceback

(i,j,s)

:#輸出計算順序

if i == j:

return

traceback(i,s[i]

[j],s)

traceback(s[i]

[j]+

1,j,s)

print

('multiply a'

,i,':'

,s[i]

[j],

'and a'

,s[i]

[j]+1,

':',j)

traceback(1,

6,s)

"""m:

0 15750 7875 9375 11875 15125

0 0 2625 4375 7125 10500

0 0 0 750 2500 5375

0 0 0 0 1000 3500

0 0 0 0 0 5000

0 0 0 0 0 0

s:0 1 1 3 3 3

0 0 2 3 3 3

0 0 0 3 3 3

0 0 0 0 4 5

0 0 0 0 0 5

0 0 0 0 0 0

multiply a 2 : 2 and a 3 : 3

multiply a 1 : 1 and a 2 : 3

multiply a 4 : 4 and a 5 : 5

multiply a 4 : 5 and a 6 : 6

multiply a 1 : 3 and a 4 : 6

"""

小黑演算法成長日記23 堆排序

arr 2,5,4,2,1,22,4,5,3,87,3,22 def adjustheap arr,length,i 調整新新增arr i 元素後,繼續調整為大根堆 temp arr i 將arr i 存入temp k 2 i 1 從孩子中進行搜尋 while k length if k 1 len...

小黑演算法成長日記7 凸多邊形最優剖分

三角形權值之和並非是邊和弦之和,在這裡坑了我兩個小時。path 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 鄰接矩陣 defw a,b,c 劃分子多邊形的三角形權值 return path a b p...

小黑演算法成長日記5 最大段和問題及其推廣

1.簡單暴力窮舉法 窮舉法 defmaxsum arr n len arr max 0 besti 1 bestj 1 for i in range n 遍歷序列開頭指標 sum 0for j in range i,n 遍歷序列結尾指標 sum arr j ifsum max max sum bes...