动态规划的思想
用众多子问题的解来得出问题的解,也可以说是避免重复计算。
矩阵连乘
给定n个矩阵,求最佳次序
- 假设我们知道最佳分割点k,则分解成子问题1k,k+1n
- 假设我们又知道了子问题的最佳分割点,则递归分解到最后肯定是3个矩阵分成2个矩阵,而两个矩阵可以直接算出来
- 所以我们直接算出所有2个的,由所有2个的算出所有3个的,再…直到n个
公式:
举个例子:
给出4个矩阵,分别是5*4, 4*6,6*2,2*7维数的矩阵
则有两个两个的相乘的次数分别是:
120 48 84
进而得出3个3个相乘最优的次数为
注意 m[1,3] = min{ (m[1,2] + m[3,3] + p0p2p3), (m[1,1] + m[2,3] + p0p1p3) },m[2,4]等以此类推
88 104
有了所有3个进而得出4个矩阵连乘的最优次序
中间过程记录下所采用的分割点就可以得出次序了。