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-最优矩阵链乘的主要内容,如果未能解决你的问题,请参考以下文章