矩阵链乘法

1.问题

矩阵链乘法

  • 设 A1, A2, … , An 为 n 个矩阵的序列,其中 Ai 为 Pi-1 * Pi阶矩阵,这个矩阵链的输入用向量 P = < P0, P1, … , Pn> 给出。
  • 给定向量 P, 确定一种乘法次序,使得基本运算的总次数达到最小。

2.解析

  • 动态规划法
    Ai…j:表示矩阵乘法的子问题;
    m[i,j]:表示得到乘积Ai…j所用最少基本运算次数;
    s[i,j]:表示得到乘积Ai…j所用最少基本运算次数最外层括号的位置。

命题 m[i,j] = min{ m[i,k] + m[k,j] + Pi-1PkPj}满足优化原则,即m[i…j]最小值时,m[i,k]和m[k+1,j]也是最小的。
在这里插入图片描述
示例:
P=<5,6,2,9,7,6>,n=5

  • A1: 5×6
  • A2: 6×2
  • A3: 2×9
  • A4: 9×7
  • A5: 7×6

(1)r=1

  • m[1,1] = 0;
  • m[2,2] = 0;
  • m[3,3] = 0;
  • m[4,4] = 0;
  • m[5,5] = 0;

(2)r=2,i=1,2,3,4; j=2,3,4,5

  • m[1,2] = 5×6×2 = 60;
  • m[2,3] = 6×2×9 = 108;
  • m[3,4] = 2×9×7 = 126;
  • m[4,5] = 9×7×6 = 378;

(3)r=3,i=1,2,3;j=3,4,5

  • m[1,3]=min{m[1,2]+m[3,3]+(A1A2)A3,m[1,1]+m[2,3]+A1(A2A3)} = 150; s[1,3]=2;
  • m[2,4]=min{m[2,3]+m[4,4]+(A2A3)A4,m[2,2]+m[3,4]+A2(A3A4)} = 210; s[2,4]=2;
  • m[3,5]=min{m[3,4]+m[5,5]+(A3A4)A5,m[3,3]+m[4,5]+A3(A4A5)} = 210; s[3,5]=4;

(4)r=4,i=1,2;j=4,5

  • 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} = 326; s[1,4]=2;
  • 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} = 282; s[2,5]=2;

(5)r=5,i=1;j=5

  • 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} = 330; s[1,5]=2;
    s[1,5] = 2: (A1A2)(A3A4A5)
    s[3,5] = 4: (A3A4)A5
    (A1A2)((A3)A4A5)

3.设计

迭代算法
核心伪代码


MatrixChain(P,n)
	输入:矩阵链Ai…j的输入向量P=<Pi-1,Pi,…Pj> 1≤i≤j≤n
输出:计算Ai…j所需最小乘法运算次数m[i…j]和最后一次运算的位置s[i…j]
令所有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的起点不断变化,各种r长
 			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

4.分析

三层循环,算法时间复杂度为O(n³)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值