矩阵乘法

最优矩阵连乘问题 区间DP

我的未来我决定 提交于 2020-01-02 02:53:08
最优矩阵连乘积 Accepted: 10 Total Submit: 18 Time Limit: 1000ms Memony Limit: 32768KB Description 在科学计算中经常要计算矩阵的乘积。矩阵A和B可乘的条件是矩阵A的列数等于矩阵B的行数。若A是一个p×q的矩阵,B是一个q×r的矩阵,则其乘积C=AB是一个p×r的矩阵。其标准计算公式为: 由该公式知计算C=AB总共需要pqr次的数乘。 为了说明在计算矩阵连乘积时加括号方式对整个计算量的影响,我们来看一个计算3个矩阵{A1,A2,A3}的连乘积的例子。设这3个矩阵的维数分别为10×100,100×5和5×50。若按第一种加括号方式((A1A2)A3)来计算,总共需要10×100×5+10×5×50=7500次的数乘。若按第二种加括号方式(A1(A2A3))来计算,则需要的数乘次数为100×5×50+10×100×50=75000。第二种加括号方式的计算量是第一种加括号方式的计算量的10倍。由此可见,在计算矩阵连乘积时,加括号方式,即计算次序对计算量有很大影响。 于是,人们自然会提出矩阵连乘积的最优计算次序问题,即对于给定的相继n个矩阵{A1,A2,…,An}(其中Ai的维数为pi-1×pi ,i=1,2,…,n),如何确定计算矩阵连乘积A1A2…An的一个计算次序(完全加括号方式)

矩阵连乘(有关区间dp)

我们两清 提交于 2020-01-02 02:51:01
  将每一个两两相乘的最优先记录好 先计算出小的区间的最优,于是可以推出大的区间的最优。以下是求解的顺序,先把1-2、2-3等等相差为1的计算出答案, 然后求1-3、 2-4等等相差为2的最优答案,以此类推,右上角的格子为问题的解。 2-5(即:2、 3、 4、 5)这个区间,可由2-3与3-5构成,还能由2-4与4-5构成,有下图。 看看实例. 算法设计例题:矩阵连乘(DP) Time Limit: 1000/500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1618 Accepted Submission(s): 545 Description 给定 n 个矩阵{ A 1 , A 2 ,…, A n },保证 A i 与 A i+1 是可乘的, i = 1,2,…, n -1。考察这 n 个矩阵的连乘积 A 1 A 2 … A n 。由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。现要求设计一个高效的算法,对给定的 n 个矩阵确定一个计算次序使得总的乘法次数最少,并输出该最优值。 Input 输入的第一行是单独一个整数T,表示案例的数目。每个案例的第一行是单独一个 n ( 1 ≤ n ≤ 50 )

区间DP——tyvj 1198 矩阵连乘

孤者浪人 提交于 2020-01-02 02:49:50
G. tyvj 1198 矩阵连乘 内存限制:128 MiB     时间限制:1000 ms     标准输入输出 题目类型:        传统 评测方式:文本比较 题目描述 一个nm矩阵由n行m列共nm个数排列而成。两个矩阵A和B可以相乘当且仅当A的列数等于B的行数。一个NM的矩阵乘以一个MP的矩阵等于一个NP的矩阵,运算量为nmp。 矩阵乘法满足结合律,ABC可以表示成(AB)C或者是A(BC),两者的运算量却不同。例如当A=23 B=34 C=45时,(AB)C=64而A(BC)=90。显然第一种顺序节省运算量。 现在给出N个矩阵,并输入N+1个数,第i个矩阵是a[i-1]*a[i]。 输入格式 第一行n(n<=100) 第二行n+1个数 输出格式 最优的运算量 样例 样例输入 3 2 3 4 5 样例输出 64 思路如下 首先,对于 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int n; 6 long long in[201],dp[201][201]/*第 i 个 至 第 j 个 的 最 小 值 */; 7 int main() 8 { 9 cin>>n; 10 for(int i=0;i<=n;i++) 11 cin>>in[i]; 12

tyvj1198 最优矩阵连乘

…衆ロ難τιáo~ 提交于 2020-01-02 02:48:57
描述 一个n*m矩阵由n行m列共n*m个数排列而成。两个矩阵A和B可以相乘当且仅当A的列数等于B的行数。一个N*M的矩阵乘以一个M*P的矩阵等于一个N*P的矩阵,运算量为nmp。 矩阵乘法满足结合律,A*B*C可以表示成(A*B)*C或者是A*(B*C),两者的运算量却不同。例如当A=2*3 B=3*4 C=4*5时,(A*B)*C=64而A*(B*C)=90。显然第一种顺序节省运算量。 现在给出N个矩阵,并输入N+1个数,第i个矩阵是a[i-1]*a[i] 输入格式 第一行n(n<=100) 第二行n+1个数 输出格式 最优的运算量 测试样例1 输入 3 2 3 4 5 输出 64 #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<vector> using namespace std; const long long maxn = 105,maxint = 98765432123456L; long long n,a[maxn],f[maxn][maxn]; int main(){ cin>>n; for(int i = 1;i <= n+1;i++){ cin>>a[i]; } for(int i = 1;i <= n+1;i+

基本矩阵运算的Java实现

醉酒当歌 提交于 2020-01-02 00:36:43
基本矩阵运算的Java实现 分类: 图像处理 2012-09-18 10:36 2537人阅读 评论 (3) 收藏 举报 java matrix parameters string class null 一: 矩阵的加法与减法 规则:矩阵的加法与减法要求两个矩阵的行列完全相等,方可以完成两个矩阵的之间的运算。 举例说明如下 二:矩阵的乘法 规则:矩阵的乘法要求两个矩阵符合A(mx k), B( k x n)即矩阵A的列数与矩阵B的行数相等,否 则无法完成矩阵运算。举例说明如下: Java代码如下: [java] view plain copy package pet.shop; public class BasicMatrixMath { public final static int OPERATION_ADD = 1 ; public final static int OPERATION_SUB = 2 ; public final static int OPERATION_MUL = 4 ; /** * To be able to add two matrices, they must be of the same size * @param matrixa * @param matrixb */ public int [][] add( int [][] matrixa,

基本矩阵运算的Java实现

▼魔方 西西 提交于 2020-01-02 00:35:46
一: 矩阵的加法与减法 规则:矩阵的加法与减法要求两个矩阵的行列完全相等,方可以完成两个矩阵的之间的运算。 举例说明如下 二:矩阵的乘法 规则:矩阵的乘法要求两个矩阵符合A(mx k), B( k x n)即矩阵A的列数与矩阵B的行数相等,否 则无法完成矩阵运算。举例说明如下: Java代码如下: [java] view plain copy package pet.shop; public class BasicMatrixMath { public final static int OPERATION_ADD = 1 ; public final static int OPERATION_SUB = 2 ; public final static int OPERATION_MUL = 4 ; /** * To be able to add two matrices, they must be of the same size * @param matrixa * @param matrixb */ public int [][] add( int [][] matrixa, int [][] matrixb) { if (legalOperation(matrixa, matrixb, OPERATION_ADD)) { for ( int i= 0 ; i<matrixa

OpenGL ES学习笔记(二)——平滑着色、自适应宽高及三维图像生成

喜夏-厌秋 提交于 2020-01-01 21:58:26
首先申明下,本文为笔者学习《OpenGL ES应用开发实践指南(Android卷)》的笔记,涉及的代码均出自原书,如有需要,请到原书指定 源码地址 下载。 《 Android学习笔记——OpenGL ES的基本用法、绘制流程与着色器编译 》中实现了OpenGL ES的Android版HelloWorld,并且阐明了OpenGL ES的绘制流程,以及编译着色器的流程及注意事项。本文将从现实世界中图形显示的角度,说明OpenGL ES如何使得图像在移动设备上显示的更加真实。首先,物体有各种颜色的变化,在OpenGL ES中为了生成比较真实的图像,对图像进行平滑着色是一种常见的操作。其次,移动设备存在横竖屏的切换,进行图像显示时,需要根据屏幕方向考虑屏幕的宽高比,使图像不因屏幕切换而变形。最后,现实中的物体都是三维的,我们观察物体都带有一定的视角,因此需要在OpenGL ES实现三维图像的显示。本文主要包括以下内容: 平滑着色 自适应宽高 三维图像生成 一、平滑着色 平滑着色是通过在三角形的每个点上定义不同的颜色,在三角形的表面混合这些颜色得到的。那么,如何用三角形构成实际物体的表面呢?如何混合定义在顶点出的不同颜色呢? 首先引入三角形扇的概念。以一个中心顶点作为起始,使用相邻的两个顶点创建第一个三角形,接下来的每个顶点都会创建一个三角形,围绕起始的中心点按扇形展开。为了使扇形闭合

Pytorch框架应用系列 之 BPNet 4-2:全连接层到矩阵计算!FC近在眼前!

核能气质少年 提交于 2020-01-01 17:05:27
专题介绍及文章命名 2020年第一更!!祝愿大家新年快乐!撸起袖子加油干!越是艰险越向前!! 专题介绍在此!希望各位读者对这个专题的各篇博客定位有全局性质的把握~~ 再次提醒:该系列专题不涉及网络细节讲解,仅限于 工程实现 与 框架学习 。想更多了解该专题内容请点击上文专题介绍链接。 该专题中,文章命名方式为: Pytorch框架应用系列 之 《项目名称》 《总章节-当前章节》:《当前章节项目名称》 BP网络专题综述在此!想了解BP网络章节的文章构成?点击此处! 目录 一. 任务模型展示 二. 函数讲解   2.1 全连接层扛把子:torch.nn.Linear    2.1.1 函数的定义及参数功能    2.1.2 函数的数学表达与数据格式 《子任务章节》    2.1.3 函数的调用实例   2.2 激活函数:torch.nn.Sigmoid    2.2.1 函数的定义及参数功能    2.2.2 函数的调用实例   2.3 网络结构容器:torch.nn.Sequential    2.3.1 函数的定义及参数功能    2.3.2 函数的调用实例 三. 专题及章节位置信息查询 一. 任务模型展示 二. 函数讲解 2.1 全连接层扛把子:torch.nn.Linear; 注:明星函数 2.1.1 函数的定义及参数功能 首先我们先来看看官方的完整定义:

矩阵论

自古美人都是妖i 提交于 2019-12-28 15:47:50
矩阵论 矩阵论札记. 梁昌洪 . 2014学习概要 文章目录 矩阵论 第1部分 线性基础 第2部分 矩阵代数 第3部分 线性方程组 第4部分 矩阵空间 第5部分 本征问题与二次型 第6部分 矩阵变换 第7部分 矩阵应用 第1部分 线性基础 矩阵3大特点 : 矩阵是线性的 矩阵是离散的 矩阵是代数和几何交融的 行列式 n n n 阶 行列式 D D D 的值为 D = ∣ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋮ a n 1 a n 2 ⋯ a n n ∣ = ∑ t = 0 n ! ( − 1 ) t a 1 p 1 a 2 p 2 ⋯ a n p n D = \left| \begin{matrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & &\vdots \\ a_{n1} & a_{n2} & \cdots &a_{nn} \end{matrix} \right | = \sum_{t=0}^{n!} (-1)^ta_{1p_1}a_{2p_2}\cdots a_{np_n} D = ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ​ a 1 1 ​ a 2 1 ​ ⋮ a n 1 ​ ​ a 1 2 ​

Numpy

时间秒杀一切 提交于 2019-12-27 07:22:10
ndarray的优势—为什么快? 存储空间连续,访问速度快 可以并行执行-Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码。 numpy基于矩阵,矩阵可以分块计算,所以可以实现并行 ndarray的属性 Shape—形状—注意:返回的是元组 ndim—维度的个数—就是shape的长度 size—元素个数=shape的各个值想乘 dtype—元素的类型 ndarray的形状 生成数组的方法 生成0和1的数组 np.ones(shape) np.ones_like(array)—根据给定数组生成一个形状一样的数组 np.zeros np.zeros_like 从现有数组生成 np.array--深拷贝 np.asarray--浅拷贝 生成固定范围的数组 np.linspace—start,stop,num 在star到stop之间等区间的选取num个数,注意:一定可以去到stop np.arange(start,stop,step) 以start未开始,每隔step取一个值 stop肯定取不到(左闭右开) 等于python的range np.logspace(start,stop,num) 以10为低的指数值,等比 生成随机数组 均匀分布 np.random.rand—0