算法分析第八次作业

1. 问题

  给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。

2. 解析

     这其实是个很简单的问题,区间dp模板题,dp[i][j],表示区间i到j合并的最小值,枚举k表示分割点,dp[1][n]即为答案

 转移方程:dp[i][j]=min(dp[i][j],dp[i][k]+d[k+1][j]+b[i]*b[k+1]*b[j+1]

3. 设计

  

1
2
3
4
5
6
7
8
9
for (int h = 1; h < n; h++) {//区间dp
    for (int i = 1; i <= n - h; i++) {
        int j = i + h;
        for (int k = i; k <= j - 1; k++) {
            if(dp[i][j]==0) dp[i][j]=dp[i][k] + dp[k + 1][j] + b[i] * b[k + 1] * b[j + 1];
            else dp[i][j]=min(dp[i][j],dp[i][k] + dp[k + 1][j] + b[i] * b[k + 1] * b[j + 1]);
        }
    }
}

 

 

4. 分析

 复杂度 O(n3)

5. 源码

https://github.com/Tinkerllt/algorithm-work.git

 

posted @   Tinker1998  阅读(80)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示