矩阵连乘----动态规划
1、问题阐述
给定 n 个矩阵{A1,A2,A3……An},其中 Ai 与 Ai+1 是可乘的。
现在 (A1,A2,A3,……An) 相乘,因为矩阵的乘法符合结合律,所以
(A1,A2),(A3,……An) = (A1,A2,A3,)(……An)
他们乘出的结果虽然一样,但是在相乘的时候产生的运算量确是不同的,
举个列子:
矩阵 A1 为 10*100 A2 为 100*5 A3 为 5*50
① 如果是 (A1A2)A3 这样来算,那么 (A1A2)需要 sum1=10*100*5=5000
次,乘出的结果是一个 10*5 的矩阵(如果这个不熟悉,请自己看一下矩阵乘法的
规则,然后自己做一个简单的矩阵乘法),接着,这个 10*5 的矩阵还要和 A3 运
算 , 易 得 sum2=10*5*50=2500 次 。
sum=sum1+sum2=5000+2500=7500 次
② 如果是 A1(A2A3) 这样来算,那么 (A2A3)需要 sum1=100*5*50=25000
次,乘出的结果是一个 100*50 的矩阵,接着,这个 100*50 的矩阵还要和 A1 运
算 , 易 得 sum2=100*50*10=50000 次
sum=sum1+sum2=5000+2500=75000 次
可以看见,同样可以得出结果,但是他们的运算量确相差了 10 倍,然而我们可以用好的
程序来算出哪种结合方式是最好的。这也真是算法的魅力所在,下面我们就一步一步来分析一
下,如何得到最佳的相乘方式,求出最少需要多少次乘法,以及得到这个 min 值是如何构造的。
2、动态规划思想分析问题
① 首先我们来提一下,动态规划的大致思想。
假设 (A1,A2,A3…Ak,Ak+1…An) 这是一个最佳的解,也就是可以得到最少的
乘法次数,那么 (A1,A2,A3…Ak) , (Ak+1…An),这样两个子问题同样也应
该是一个最佳的解,这个应该很容易理解。动态规划是为了求得一个最佳的解,而往
往我们不是直接就求出来的,而是一步一步的划分,从最小的问题开始求解,
构
构成 成
依 构 依
依赖 赖 成 赖
从上面的图可以看出子问题和大问题的关系,子问题构成了大问题,(并且子问题之间
是有交集的,如果没有交集则大多会用分治递归的思想)而大问题的求解需要依赖子问题