码迷,mamicode.com
首页 > 其他好文 > 详细

《训练指南》——7.21

时间:2016-07-21 22:02:05      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

Q:矩阵链乘

  熟悉线性代数的同学会知道,矩阵乘法AxB在矩阵A是m x n,矩阵B是n x p的时候才有定义,其运算量是mnp。

  那么现在给出n个矩阵,用数组p[](长度为n)来记录各个矩阵的的行列,那么安排一种矩阵乘法的分配方案,使得全局的运算量最少。

  分析:很显然这是一个基于线性区间上的一个dp问题,其实dp问题很大的一个难度就在于子问题化,完成了恰到好处的子问题化,递推方程的得到是水到渠成的。而对于线性区间上的问题,子问题的分割往往也是从区间入手。

  这里我们的最终解释基于p数组[0,n]的区间段上,我们设置二维数组dp[i][j]用来表示p数组在区间[i-1,j]上的解(也就是第i个矩阵链乘到第j个矩阵的最小运算量),而区间上的dp最常见的子问题化就是定义好状态之后,取一点,然后然这个点遍历[i,j]区间来得到所有的子问题然后维护最值便可完成整个dp过程。

  其实也可以理解为,枚举区间[i,j]上最后一次链乘的中间参数k的所有位置。

  在这里,为了求解dp[i][j],我们设置区间k∈(i,j),那么很容易得到如下的状态转移方程:

  技术分享

    边界情况:dp[i][i] = 0.

《训练指南》——7.21

标签:

原文地址:http://www.cnblogs.com/rhythmic/p/5693214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!