矩阵相乘求最优解(C++算法)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了矩阵相乘求最优解(C++算法)相关的知识,希望对你有一定的参考价值。

#include "stdafx.h" 
#include <iostream>  
using namespace std;  
 
const int L = 7; 
 
int RecurMatrixChain(int i,int j,int **s,int *p);//递归求最优解 
void Traceback(int i,int j,int **s);//构造最优解 
 
int main() 

    int p[L]={30,35,15,5,10,20,25}; 
 
    int **s = new int *[L]; 
    for(int i=0;i<L;i++)   
    {   
        s[i] = new int[L];   
    }  
 
    cout<<"矩阵的最少计算次数为:"<<RecurMatrixChain(1,6,s,p)<<endl; 
    cout<<"矩阵最优计算次序为:"<<endl; 
    Traceback(1,6,s); 
    return 0; 

 
int RecurMatrixChain(int i,int j,int **s,int *p) 

    if(i==j) return 0; 
    int u = RecurMatrixChain(i,i,s,p)+RecurMatrixChain(i+1,j,s,p)+p[i-1]*p[i]*p[j]; 
    s[i][j] = i; 
 
    for(int k=i+1; k<j; k++) 
    { 
        int t = RecurMatrixChain(i,k,s,p) + RecurMatrixChain(k+1,j,s,p) + p[i-1]*p[k]*p[j]; 
        if(t<u) 
        { 
            u=t; 
            s[i][j]=k; 
        } 
    } 
    return u; 

 
void Traceback(int i,int j,int **s) 

    if(i==j) return; 
    Traceback(i,s[i][j],s); 
    Traceback(s[i][j]+1,j,s); 
    cout<<"Multiply A"<<i<<","<<s[i][j]; 
    cout<<" and A"<<(s[i][j]+1)<<","<<j<<endl; 

以上是关于矩阵相乘求最优解(C++算法)的主要内容,如果未能解决你的问题,请参考以下文章

信息学:C++最优化问题(贪心算法)

力扣刷题之贪心算法(C++)

matlab求解最优解

(c++)迷宫自动寻路-队列-广度优先算法-附带寻路打印动画

用C++求dijkstra算法求最短路径

[MATLAB] 利用遗传算法函数求目标函数的最优解