#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++算法)
时间: 2024-10-26 21:22:29
矩阵相乘求最优解(C++算法)的相关文章
C语言 &#183; 矩阵相乘 &#183; 算法提高
算法提高 矩阵相乘 时间限制:1.0s 内存限制:256.0MB 问题描述 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容. 当然,小明上课打瞌睡也没问题,但线性代数的习题可是很可怕的. 小明希望你来帮他完成这个任务. 现在给你一个ai行aj列的矩阵和一个bi行bj列的矩阵, 要你求出他们相乘的积(当然也是矩阵). (输入数据保证aj=bi,不需要判断) 输入格式 输入文件共有ai+bi+2行,并且输入的所有数为整数(long long范围
稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结
稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 一:稀疏矩阵的三元组顺序表数据结构 typedef int ElemType; typedef struct { intx, y; //该非零元素的行下标和列下标 ElemTypee; //该非零元素的值 } Triple; typedef struct { Tripledata[MAXSIZE]; //非零元素三元组顺序表 intmu, nu, t
算法笔记_003:矩阵相乘问题【分治法】
目录 1 问题描述 1.1实验题目 1.2实验目的 1.3实验要求 2 解决方案 2.1 分治法原理简述 2.2 分治法求解矩阵相乘原理 2.3 具体实现源码 2.4 运算结果截图 1 问题描述 1.1实验题目 设M1和M2是两个n×n的矩阵,设计算法计算M1×M2 的乘积. 1.2实验目的 (1)提高应用蛮力法设计算法的技能: (2)深刻理解并掌握分治法的设计思想: (3)理解这样一个观点:用蛮力法设计的算法,一般来说,经过适度的努力后,都可以对其进行改进,以提高算法的效率. 1.3实验要求
矩阵相乘优化算法实现讲解
矩阵相乘 什么是矩阵? 在数学中,矩阵(Matrix)是指纵横排列的二维数据表格,最早来自于方程组的系数及常数所构成的方阵.这一概念由19世纪英国数学家凯利首先提出. 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中.并且在ACM竞赛,有很多涉及到矩阵知识的题.许多算法都会结合矩阵来处理,而比较具有代表性的矩阵算法有:矩阵快速幂.高斯消元等等. 例如下面的图片就是一个矩阵: 上述矩阵是一个 4 × 3 矩阵: 某矩阵 A 的第 i 行第 j 列,或 I , j位,通常记为
矩阵相乘的算法
很久没写blog了,感觉人都快变的抑郁了,换工作之后各种揪心,说好了是做Android的,结果让我搞各种算法,也罢,权当学习了一点知识吧. 今天说说矩阵相乘的算法,计算算法很简单,就是3个for循环. 首先还是说下矩阵相乘的概念,其实大学的时候线性代数中应该有讲到,不过到现在估计都还给老师了. 废话不多说,矩阵,其实就是一个二维数组,横竖排列的,比如int[5][6],就是一个矩阵,表示有5行6列. 只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义.一个m×n的矩阵a(m,n)左乘一个n×p
【转】【矩阵】三维坐标旋转矩阵算法
3D数学 ---- 矩阵和线性变换 一般来说,方阵能描述任意线性变换.线性变换保留了直线和平行线,但原点没有移动.线性变换保留直线的同时,其他的几何性质如长度.角度.面积和体 积可能被变换改变了.从非技术意义上说,线性变换可能“拉伸”坐标系,但不会“弯曲”或“卷折”坐标系. 矩阵是怎样变换向量的 向量在几何上能被解释成一系列与轴平行的位移,一般来说,任意向量v都能写成“扩展”形式: 另一种略有差别的形式为: 注意右边的单位向量就是x,y,z轴,这里只是将概念数学化,向量的每个坐标都表明了平行于相
hdu 4920 Matrix multiplication(矩阵相乘)多校训练第5场
Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem Description Given two matrices A and B of size n×n, find the
矩阵相乘
有一个x*y的矩阵和一个y*z矩阵相乘,元素均为整数,求两个矩阵相乘得到的矩阵.这是一道华为OJ题,具体描述忘记了,大致内容如此.并且要求实现的函数参数为指针. 例如矩阵1为 int m1[1][3]={2,-6,3}; 矩阵2为 int m2[3][1]={4,-2,-4}; 乘积矩阵初始化为 int r[1][1]=0; 要求实现的函数为 void matrix_multiple(int *m1,int *m2,int *r,int x,int y,int z) 代码如下: void mat
HDU 4920 Matrix multiplication(矩阵相乘)
各种TEL,233啊.没想到是处理掉0的情况就可以过啊.一直以为会有极端数据.没想到竟然是这样的啊..在网上看到了一个AC的神奇的代码,经典的矩阵乘法,只不过把最内层的枚举,移到外面就过了啊...有点不理解啊,复杂度不是一样的吗.. Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 640