矩阵连乘最优次序 c++实现 动态规划算法

本文介绍了如何使用C++编程实现矩阵连乘的最优次序问题,通过动态规划方法来求解最小乘法次数。详细探讨了算法思路,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>

const int N=4;

namespace recursion
{  /*p数组存储比从start到end再多一个的数,
代表着m[start][end]*/
int matrixChain(const int *p,int start,int end)
{
   if(start>=end)return 0;
   int min=65536;
   int temp=0;
   for(int i=start;i<end;i++)
   {
            temp=matrixChain(p,start,i)+matrixChain(p,i+1,end)+p[start-1]*p[i]*p[end];
    if(min>temp)min=temp;
   }
   return min;
}


};
namespace nonRecursion
{
    
   /*p代表维数数组,n代表矩阵个数 s是记录分割处的数组,m是记录最小乘次数数组,数组第0行和第0列都不用*/
void matrixChain(int *p,int n,int s[][N+1],int m[][N+1])
{
   int i,j,k;
   for(i=1;i<=n;i++)m[i][i]=0;//先是一个一个矩阵,不用乘,所以次数都为零
   for(int r=2;r<=n;r++)//以后就开始让i和j离开了,r代表他俩之间的矩阵个数包括他俩,开始是两个(就是他俩挨着),越来越远
    for(i=1;i<=n-r+1;i++)
    {
     j=i+r-1;//j在i后面第r个 ,i 是i后面第一个
     m[i][j]=m[i][i]+m[i+1][j]+p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值