动态规划_备忘录法_矩阵链乘问题
问题描述
给定个矩阵,其中为矩阵,,并且与是可乘的。由于矩阵乘法满足结合律,所以计算矩阵的链乘可有许多不同的计算次序,两个矩阵与相乘的工作量为次数乘。
给定向量为个矩阵的行数和列数,确定一种乘法次序,使得基本运算“数乘”的总次数最少。
完全加括号
完全加括号的矩阵链乘积可递归地定义为:
- 单个矩阵是完全加括号的
- 矩阵链乘积是完全加括号的,则可表示为两个完全加括号的矩阵链乘积和的乘积,并加括号,即
最优子结构
- 矩阵链乘简记为,于是矩阵链乘可记为,完全加括号形式为
- 矩阵连乘的最优计算次序的计算量等于和两者的最优计算次序的计算量之和,再加上和相乘的计算量。矩阵链乘问题的最优解具有最优子结构特性。
最优解的递推关系
- 由和确定子问题的边界,输入
- 确定优化函数和递推方程:二维数组用来保存矩阵链乘时所需的最小计算量
- 设立标记函数:为了确定加括号的次序,设计表记录求得最优时,最后一次运算的位置,即达到最小时的划分。
算法描述(伪代码)
- 迭代实现 备忘录法
MatrixChain(P,n)
令所有m[i,j]的初值为0;
for r <- 2 to n do
for i <- 1 to n-r+1 do
j <- i+r-1;
m[i,j] <- m[i+1,j]+P_i-1P_iP_j;
s[i,j] = i;
for k <- i+1 to j-1 do
t <- m[i,k]+m[k+1,j]+P_i-1P_kP_j;
if t < m[i,j]
then m[i,j] <- t;
s[i,j] <- k;
结束语
醉后不知天在水,满船清梦压星河
作者:花城
本文来自博客园,作者:{花城1122},转载请注明原文链接:https://www.cnblogs.com/huacheng1122/p/14993588.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!