zoukankan      html  css  js  c++  java
  • 《训练指南》——7.21

    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.

  • 相关阅读:
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业02--线性表
    c博客06-2019-结构体&文件
    C博客作业05--2019-指针
    C语言博客作业04--数组
    c语言博客作业03--函数
    C语言博客作业02--循环结构
    深入理解Java线程池原理
    Offer快到碗里来——聊聊线程池
  • 原文地址:https://www.cnblogs.com/rhythmic/p/5693214.html
Copyright © 2011-2022 走看看