@TOC矩阵链相乘的python实现
矩阵链相乘的python实现
关于矩阵链相乘的问题,同样是使用动态规划的思想进行解决,
原理
原理见下图所示:
python代码实现
import numpy as np
def get_min_matrixchain_mul_num(matrix_rows):
#对于一个长度为n的矩阵链相乘,list r 的长度为,n+1,r[0]至r[n-1]为n个矩阵的行数,
#r[n]为最后一个矩阵的列数
r = matrix_rows
#矩阵链的个数n = len(r) -2
n = len(r) - 1
C = np.zeros((n, n), dtype=np.int)
#有上面的初始化可以知道主对角线元素C[i,i]已经填充好,接下来依次填充主对角线上面各对角线的元素
for d in range(1, n):
for i in range(0, n-d):
j = i + d
sub_multiplition_nums = []
for k in range(i+1, j+1):d
sub_multiplition_nums.append(C[i, k-1] + C[k, j]+r[i]*r[k]*r[j+1])
C[i, j] = min(sub_multiplition_nums)
return C[0, n-1]
if __name__ == '__main__':
M = [5, 10, 4, 6, 10, 2]
print(get_min_matrixchain_mul_num(M))
运行结果如下:
这与课本上所给出的解析答案一致