首页 > 其他分享 >矩阵乘法

矩阵乘法

时间:2024-07-28 21:29:56浏览次数:16  
标签:Matrix int 矩阵 列数 递推 乘法

OI 中的主要应用在于加速计算线性递推式。

举例来自 OI-wiki。

image

通常使用二维数组模拟矩阵。

矩阵乘法的一个前提是两个矩阵中存在一个的行数等于另一个的列数的情况,因此在处理非正方形时的矩阵乘法时要注意循环顺序对应的行与列。

通常将二维数组封到一个结构体内,定义如下:

struct Matrix
{
	int a[x][y];
	// 表示矩阵的行数和列数
	Matrix(){memset(a,0,sizeof a);}
	// 初始化
}

个人不是很喜欢将行列放到和数组一起,不方便转移,看个人习惯。

乘法:

Matrix mul(Matrix a,Matrix b,int x,int y,int z)
{
	// 使目标矩阵规格与 a 矩阵相同
	// 设 a 的行数等于 b 的列数
	// x 为目标矩阵的列数,z 为 b 矩阵的行数,y 为二者相同的那一值
	Matrix c;
	for(int i=0;i<x;i++)
		for(int j=0;j<z;j++)
			for(int k=0;k<y;k++)
				c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j]%mod+mod)%mod;
	return c;

}

快速幂:通常情况下仅会出现方阵的快速幂。

Matrix pow(rmm a,int t,int x)
{
	Matrix b;
	for(int i=0;i<x;i++) b.a[i][i]=1;
	// 构造一个单位矩阵
	while(t)
	{
		if(t&1) b=mul(a,b,x,x,x);
		a=mul(a,a,x,x,x);
		t>>=1;
	}
	return b;
}

应用上:当你遇到一个线性复杂度明显过不去但确定是正解的时候,可以尝试使用矩阵加速。

推矩阵上:一般考虑将结果和与推出结果有关的变量放入矩阵,根据代数式找到其对应的 base 矩阵(通常为方阵),然后找到初始矩阵的值后,快速幂即可。

例题:

  • 佳佳的Fibonacci

很好且基础的一道题,建议自己推一推,做完能更好地体会到矩阵的神奇。

Fibonacci 是个很众所周知的递推数列,所以构造矩阵的方法也很多,记得当时刚奥赛合班推了一个下午,挺有成就感的。

  • 崩坏星穹铁道
    别骂了知道这道题很唐

题意很简单,没玩过的崩铁的也比较好理解,反倒是牢玩家容易想复杂。

挂一篇我的题解

递推式极易得出,但 \(10^18\) 的范围显然不是简单线性能过的,所以这道题就是一个隐晦的矩阵快速幂基础题。

  • GT考试

建议先学完 kmp 再做,不然抄板子过会损失很多乐趣。

挂一篇我的题解(魔怔人别太在意变量名)

一道典型的矩阵加速的题,递推式想出来后,把矩阵迁移到题目中就好。


完结撒花~

祝学好每一个新(老)算法~

标签:Matrix,int,矩阵,列数,递推,乘法
From: https://www.cnblogs.com/Ratio-Yinyue1007/p/18328898

相关文章

  • 矩阵
    矩阵高斯消元没啥好说的,直接上代码:#include<iostream>#include<cstdio>#include<cmath>usingnamespacestd;doublea[105][105];intmain(){intn;cin>>n;for(inti=1;i<=n;i++)for(intj=1;j<=n+1;j++)......
  • 可逆矩阵的概念、定理、判断条件和性质(线性代数基础)
    可逆矩阵的概念、定理、判断条件和性质可逆矩阵的概念定义:设AAA为n......
  • 题解 - 矩阵
    题目描述小明和小花知道学信息学竞赛的学生特别擅长做一些和矩阵相关的问题。例如,同学经常做的一个题目,给你一个N×M的矩阵,矩阵里面每个格子上都有一个数,要从左上角(1,1),走到右下角(N,M),每一步只能往下或者往右走,让你求经过的路径上数的总和最小。小明和小花发现这个......
  • 如何比较两个大的温度矩阵数据集并对差异/相似之处进行分类?我如何继续寻找好的方法?
    我有以下问题:我想在python中比较热图像(数据以一个大矩阵/每个像素一个值的形式出现)并了解它们的不同。哪些统计方法是相关的?我如何继续找到一个好的测试?在python中比较矩阵/图片的其他方法是什么?我有一些数据集,并且知道其中一些数据应该被测试视为不同的,而有些数据应该被......
  • 矩阵的奇异值分解(SVD)及其应用
    奇异值分解(SingularValueDecomposition,SVD)是矩阵的一种分解方法,与特征值分解不同,它可以应用于长方矩阵中,并将其分解成三个特殊矩阵的乘积。此外SVD分解还具有许多优良的性质,在图像压缩,数据降维和推荐系统等算法中都具有广泛的应用。奇异值分解的引入我们考虑二维的情形,考虑......
  • 矩阵乘法写法比较
    免责声明测的比较随意,有吹黑哨的嫌疑。看一下就好了。测试对象\(n=1000\),测试\(n\timesn\)矩阵乘\(n\timesn\)的atcoder::modint998244353的矩阵乘法速度。矩阵数字生成:mt19937rng{1}正确结果矩阵元素异或和:6597111编译选项: g++$<-o$@-O2-std=c++14-static......
  • 24矩阵杯线下赛
    24矩阵杯线下赛是在6月26日-6月27日最终排名在27名比赛内容是内网渗透,基本上都是用工具扫签了保密协议,题目不让放出来这个比赛是由360安全举办的,包路费,酒店费,就感觉挺好的比赛结束之后,晚上是聚会,有抽奖,我抽到了贴纸和U盘,运气爆棚。......
  • 2024矩阵杯初赛
      矩阵杯WP没问题的话就进决赛了 一眼看是USB流量  但这题不考,回到题目CTF异世界的代码监察员lulu猪的照片被人偷拷贝走时触发了保护机制,不仅对图片进行了隐写术.js的加工,还留下了传输的痕迹,神奇的Misc选手能证明这张图片是被偷拷走的吗再看看提示:Tointroduceyou,......
  • tensor对张量和矩阵的操作
    点击查看代码#-*-coding:utf-8-*-#@Author:钱力#@Time:2024/7/2610:36importtorcha=torch.arange(5)b=a[2:]#截取a的部分值print('a',a)print('b',b)#打印存储地址#可以发现他们共用存储区#b的索引比a偏移了2位print(a.untyped_storage......
  • 基于GD32的矩阵按键usb-hid设备,详细教程,完全模拟的电脑数字键盘的所有功能,包括长按、
    本文采用的是基于GD32F350的一个4×5的矩阵键盘键盘板。矩阵键盘的电路原理图大致如下,由四个列引脚和五个行引脚来检测判断按键的按下。本文四个列引脚分别是PA15PB8PB9PC13,五个行引脚分别是PB10PB11PB12PB13PB14。typedefstruct{uint32_tGPIO_Group;......