实验二 动态规划
代码仅供参考!!!
一、 实验目的及任务
- 掌握动态规划算法的基本步骤:找出最优解的性质,并刻画其结构特征;递归地定义最优值;以自底向上的方式计算出最优值;根据计算最优值时得到的信息,构造最优解。
- 设计并实现矩阵连乘的算法,掌握动态规划算法。
二、 实验环境
python
三、 问题描述
给定n个矩阵<A1,A2,…,An>,其中Ai与Ai+1是可乘的,i=1,2…,n。 矩阵 Ai 的维度为 P i-1´ Pi,如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。
四、 编程任务
设计一个动态规划算法确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。
五、 数据输入
随机产生10以上的字符,放入输入文件input.txt,如:P={30,35,15,5,10,20,25}
六、 结果输出
程序运行结束时,将矩阵连乘的加括号方式以及所计算的乘法次数输出。
def matrixMultiplication(nums):
n = len(nums)
dp = [[0] * n for _ in range(n)]
for i in range(n):
for j in range(i+1, n):
for k in range(j+1, n):
dp[i][j] = max(nums[i]*nums[j], nums[i]*nums[k], nums[j]*nums[k])
return dp[0][0]
nums = [10, 12, 11, 13]
print(matrixMultiplication(nums)) # 输出 91