矩阵链乘法

1.问题
给定一个n个矩阵的序列<A1,A2,…,An>,矩阵Ai的规模为P(i-1)*P(i) (1<=i<=n),矩阵的输入用向量P=<P0,P1,…,Pn>给出。
给定向量 P,确定一种乘法次序,使得基本运算的总次数达到最小。

例如,P=<10,100,30,40>,则A1:10×100,A2:100×30,A3:30×40,有两种结合次序

1)(A1A2)A3:10×100×30+10×30×40=42000
2)A1(A2A3):10×100×40+100×30×40=160000
2.解析
1)蛮力法

枚举所有可能的乘法次序,针对每种次序计算基本运算的次数,从中找出具有最小运算次数的乘法次序。每一种乘法次序对应了一种在 n 个项中加 n-1 对括号。加 n 对括号的方法数是一个 Catalan 数,等于在这里插入图片描述

时间复杂度如下:
在这里插入图片描述

2)动态规划法
在这里插入图片描述
在这里插入图片描述

3.设计
1)伪代码
在这里插入图片描述
2)实例
P=<8,10,20,30,5,7,12>,n=6
p0=8 p1=10 p2=20 p3=30 p4=5 p5=7 p6=12
A1:810 A2:1020 A3:2030 A4:305 A5:57 A6:712
1)r=1
m[1,1]=0;
m[2,2]=0;
m[3,3]=0;
m[4,4]=0;
m[5,5]=0;
m[6,6]=0;
2)r=2, i=1,2,3,4,5, j=2,3,4,5,6
m[1,2]=81020=1600;
m[2,3]=102030=6000;
m[3,4]=20305=3000;
m[4,5]=3057=1050;
m[5,6]=5712=420;
3)r=3, i=1,2,3,4, j=3,4,5,6
m[1,3]=min
m[1,1]+m[2,3]+A1(A2A3)=m[1,1]+m[2,3]+p0p1p3=0+6000+81030=8400
m[1,2]+m[3,3]+(A1A2)A3=m[1,2]+m[3,3]+p0p2p3=1600+0+82030=6400
s[1,3]=2
m[2,4]=min
m[2,2]+m[3,4]+A2(A3A4)=0+3000+p1p2p4=4000
m[2,3]+m[4,4]+(A2A3)A4=6000+0+p1p3p4=7500
s[2,4]=2
m[3,5]=min
m[3,3]+m[4,5]+A3(A4A5)=0+1050+p2p3p5=5250
m[3,4]+m[5,5]+(A3A4)A5=3000+0+p2p4p5=3700
s[3,5]=4
m[4,6]=min
m[4,4]+m[5,6]+A4(A5A6)=0+420+p3p4p6=2220
m[4,5]+m[6,6]+(A4A5)A6=1050+0+p3p5p6=3570
s[4,6]=4
4)r=4, i=1,2,3, j=4,5,6
m[1,4]=min{m[1,1]+m[2,4]+A1(A2A3A4),m[1,2]+m[3,4]+(A1A2)(A3A4),
m[1,3]+m[4,4]+(A1A2A3)A4}=min{3900,5400,7600}=4400;
s[1,4]=1
m[2,5]=min{m[2,2]+m[3,5]+A2(A3A4A5),m[2,3]+m[4,5]+(A2A3)(A4A5),
m[2,4]+m[5,5]+(A2A3A4)A5}=4350;
s[2,5]=4
m[3,6]=min{m[3,3]+m[4,6]+A3(A4A5A6),m[3,4]+m[5,6]+(A3A4)(A5A6),
m[3,5]+m[6,6]+(A3A4A5)A6}=4620;
s[3,6]=4
5)r=5, i=1,2, j=5,6
m[1,5]=min{m[1,1]+m[2,5]+A1(A2A3A4A5),m[1,2]+m[3,5]+(A1A2)(A3A4A5),
m[1,3]+m[4,5]+(A1A2A3)(A4A5),m[1,4]+m[5,5]+(A1A2A3A4)A5}=4680;
s[1,5]=4
m[2,6]=min{m[2,2]+m[3,6],A2(A3A4A5A6),m[2,3]+m[4,6]+(A2A3)(A4A5A6),
m[2,4]+m[5,6]+(A2A3A4)(A5A6),m[2,5]+m[6,6]+(A2A3A4A5)A6}=5020;
s[2,6]=4
6)r=6, i=1, j=6
m[1,6]=min{m[1,1]+m[2,6]+A1(A2A3A4A5A6),m[1,2]+m[3,6]+(A1A2)(A3A4A5A6),
m[1,3]+m[4,6]+(A1A2A3)(A4A5A6),m[1,4]+m[5,6]+(A1A2A3A4)(A5A6),
m[1,5]+m[6,6]+(A1A2A3A4A5)A6}=5300;
s[1,6]=4
所以最小乘法次数为:5300
得到划分方法应为:
s[1,6]=4 (A1A2A3A4)(A5A6)
s[1,4]=1 A1(A2A3A4)
s[2,4]=2 A2(A3A4)
即:(A1(A2(A3A4)))(A5A6)
4.分析
迭代算法复杂度:T(n)=O(n3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值