动态规划-矩阵链乘法
采用动态规划的方式求解矩阵链乘法问题
问题描述
-
给定一个n个矩阵的序列(矩阵链< A 1 , A 2 , . . . , A n A_{1},A_{2},...,A_{n} A1,A2,...,An>),希望计算其乘积
A 1 A 2 . . . A n A_{1}A_{2}...A_{n} A1A2...An---------------------------------------------------------------(1) -
使用括号明确计算次序,然后依据标准矩阵计算乘法计算其结果。
已知,任何加括号的方式都将得到相同的计算结果。所以为了减少计算的复杂程度(不同计算顺序,乘法次数也不同),引出如下定义:已知,任何加括号的方式都将得到相同的计算结果。所以为了减少计算的复杂程度(不同计算顺序,乘法次数也不同),引出如下定义:
完全括号化的矩阵链:
a. 它是单一矩阵;
b. 或者是两个完全括号化的矩阵链乘积,且已加外括号。例如矩阵链为< A 1 , A 2 , A 3 , A 4 A_{1},A_{2},A_{3},A_{4} A1,A2,A3,A4>的一个完全括号化的矩阵链为 ( A 1 ( A 2 ( A 3 A 4 ) ) ) (A_{1}(A_{2}(A_{3}A_{4}))) (A1(A2(A3A4))) -
寻找最少乘法次数
由标准矩阵计算乘法方式可知,假设计算 A p ∗ q A q ∗ r A_{p*q}A_{q*r} Ap∗qAq∗r则乘法次数一共 p ∗ q ∗ r p*q*r p∗q∗r次。(两个矩阵相乘的条件是必须相容,即前一个矩阵的列数等于后一个矩阵的行数) -
矩阵乘法链问题的简化
给定的n个矩阵的链< A 1 , A 2 , . . . , A n A_{1},A_{2},...,A_{n} A1,A2,...,An>,且由上一小节可知我们可以将数据链的规模简化为< A p 0 ∗ p 1 , A p 1 ∗ p 2 , . . . , A p n − 1 ∗ p n A_{p_{0}*p_{1}},A_{p_{1}*p_{2}},...,A_{p_{n-1}*p_{n}} Ap0∗p1