码迷,mamicode.com
首页 > 其他好文 > 详细

矩阵链乘法

时间:2015-05-11 17:56:02      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:矩阵链乘法

矩阵链乘法
?给定一个由n个矩阵构成矩阵序列(链)<A1, A2, ..., An>,要将它们相乘(假定它们按此序列是乘法相容的:Ai是pi-1×pi矩阵,而Ai+1是pi×pi+1矩阵),计算积:

           A1A2 ... An

?只要对此序列加上括号,确定运算顺序,就可以算得它们的积。矩阵链的积称为是完全加括号的,若它或是单一的矩阵,或是两个完全加括号的矩阵子链之积,并用一对括号括起来。

1.问题的理解与描述
?输入:数组<p0, p1, …, pn>,其中pi-1和pi分别是矩阵Ai的行数和列数,i=1, 2, …, n。
?输出:计算积A1A2 … An的最优完全加括号形式。
2.最优子结构
?假定Ai Ai+1… Aj的最优完全加括号在Ak及Ak+1之间分裂。则该加括号的“前缀”子链Ai Ai+1… Ak在Ai Ai+1… A j的此最优加括号中的完全加括号必为Ai Ai+1… Ak的最优加括号。
?设m[i, j]为计算矩阵所需的最少标量乘法次数,根据上面的最优子结构的讨论,我们有:

0    如果i = j
m[i,j] = │
          └ min(i≤k<j) {m[i,k] + m[k+1,j] + Ai.row*Ak.col*Aj.col}  如果ij

3.4.算法的伪代码描述

MATRIX-CHAIN-ORDER(p)
n ← length[p] - 1
for i ← 1 to n
do m[i, i] ← 0
for l ← 2 to n ?//l 是矩阵链的长度
do for i ← 1 to n - l + 1
do j ← i + l - 1
m[i, j] ← ∞
for k ← i to j - 1
do q ← m[i, k] + m[k + 1, j] + pi-1 pkpj
if q < m[i, j]
then m[i, j] ← q
s[i, j] ← k
return m and s

矩阵链乘法

标签:矩阵链乘法

原文地址:http://blog.csdn.net/u010177286/article/details/45646043

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!