dp-最优矩阵链乘

Posted smsylby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dp-最优矩阵链乘相关的知识,希望对你有一定的参考价值。

来自于紫书

题目大意

(n)个矩阵组成的序列,设计一种运算顺序把它们依次乘起来,使得总运算量最小。假设第i个矩阵(A_i)(P_{i-1} imes P_i)的。((n<=100)

例如:假设(A)(B)(C)分别是(1 imes 50 , 50 imes 20 , 20 imes 5)

(A imes (B imes C))的运算量为(1 imes 50 imes 5 + (50 imes 20 imes 5) = 5250)

((A imes B) imes C)的运算量为((1 imes 50 imes 20) + 1 imes 20 imes 5 = 1100)

显然后者更优

解法

最后一次乘时整个矩阵序列一定是被分成两半,假设分界点是(k)

(L = A_1 imes A_2 imes ... imes A_k)(R = A_{k+1} imes A_{k+1} imes ... imes A_n)

无论(L)(R)的内部怎样乘,最后(L imes R)的运算量都是不变的

故可以让(L)(R)按各自最优方案计算,最后再加上(L imes R)的运算量即可

所以可以设(f(i,j))表示第(i)个矩阵到第(j)个矩阵乘起来所需的最少的运算量,转移方程为:

(f(i,j) = min{ f(i,k) + f(k+1,j) + P_{i-1} imes P_k imes P_j } ( i <= k < j))

边界(f(i,i) = 0),因为转移方程中(k >= i)(k < j),所以(dp)的顺序为(i)递减,(j)递增

模板题:Poj-1651 Multiplication Puzzle

如果没看过矩阵链乘题目的话,估计一时半会还想不出这道题

以上是关于dp-最优矩阵链乘的主要内容,如果未能解决你的问题,请参考以下文章

矩阵链乘最优化实现

矩阵最优链乘及Java实现

动态规划—矩阵链乘法

0x53. 动态规划 - 区间DP(习题详解 × 8)

区间dp总结

矩阵链乘