2021-05-09

实验报告

课程名称 《算法分析与设计》 实验日期 2021 年 4 月 25 日 至 2021 年 4 月 25日
学生姓名 石晨昊 所在班级 计算机194 学号 2019212212322
实验名称 投资问题
实验地点 同组人员

1.问题
矩阵链乘法
2.解析
只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×r的矩阵A左乘一个r×n的矩阵B,会得到一个m×n的矩阵C。在计算机中,一个矩阵说穿了就是一个二维数组。一个m行r列的矩阵可以乘以一个r行n列的矩阵,得到的结果是一个m行n列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的r个数与后一个矩阵第j列上的r个数对应相乘后所有r个乘积的和。
3.设计

void matrixChainOrder(int p[],int length,int m[][N],int s[][N])
{
    int i,l,j,k;
    int q;
    for(i=0;i<length;++i)
        m[i][i]=0;//记录矩阵所需标量乘法的最小值
    for(l=2;l<length;++l)//l为矩阵链的长度
    {
        for(i=1;i<length-l+1;++i)
        {
            j=i+l-1;
            m[i][j]=100000;
            for(k=i;k<=j-1;++k)
            {
               q=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
               if(q<m[i][j])
               {
                   m[i][j]=q;
                   s[i][j]=k;//s[][]记录构造最优解所需信息
               }
            }
        }
    }
}
 
void printOptimalParents(int s[][N],int i,int j)//输出最优解函数
{
    if(i==j)
        cout<<"A"<<i;
    else
    {
        cout<<"(";
        printOptimalParents(s,i,s[i][j]);
        printOptimalParents(s,s[i][j]+1,j);
        cout<<")";
    }
}	

4.分析
用动态规划算法解矩阵链乘法问题需要时间为O(n3),空间为O(n2),

5.源码
https://github.com/695950719/Algorithm-design/blob/main/%E7%9F%A9%E9%98%B5%E9%93%BE%E4%B9%98%E6%B3%95.cpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值