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