首页 > 其他 > 详细

《训练指南》——7.21

时间:2016-07-21 22:01:28      阅读:303      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!