矩阵链乘法-动态规划

这篇博客探讨了如何使用动态规划解决矩阵链乘法问题,以找到矩阵序列的最优乘法次序,从而最小化运算次数。通过解析公式m[i,j],博主给出了求解过程,并提供了伪代码进行解释。分析表明,问题的时间复杂度为T(n)=Ω(2^(n-1))。源代码可在GitHub上查阅。" 122785535,11235778,C语言二维数组指针详解,"['c语言', '开发语言', '后端']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.问题
给定一个n个矩阵的序列(矩阵链)<A1,A2,…,An>,用向量P<P0,P1…Pn>输入,求一种乘法的次序使得这个矩阵链的运行次数达到最小。

解析
我们已知m[i,j]为Ai到Aj采用最优的乘法次序得到的最小运行次数。
m[i,j]=min{m[i,k]+m[k+1,j]+Pi-jPkPj},该命题为真,需要证明的话请自行查找相关资料。
i<=k<j 最后S[i,j]=k;
于是一通计算猛如虎:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
求出了最优的策略。

伪代码

//另所有m[i,j]的初值为0,s[i,j]的初值为i,1<=i<=j<=n
 For r=2 to n do    //r为当前问题规模
   For i=1 to n-r+1 do //i的起点不断变化
    j=i+r-1   //不同终点
    
    m[i,j]=m[i+1,j]+Pi-1PkPj  //划分为Ai(Ai+1....Aj)
    s[i,j]=i
For k=i+1 to j-1 do
t=m[i,k]+m[k+1.j]+Pi-1PkPj
   if(t<m[i,j])
   Then m[i,j]=t
   s[i,j]=k

分析
T(n)=Ω(2^(n-1))

源代码
https://github.com/jiachenwei123/jiajia/blob/master/%E7%9F%A9%E9%98%B5%E9%93%BE%E4%B9%98%E6%B3%95

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值