首页 > 其他分享 >矩阵学习笔记

矩阵学习笔记

时间:2024-08-03 22:39:40浏览次数:5  
标签:begin Matrix res 矩阵 笔记 times 学习 bmatrix

矩阵引入

矩阵引入来源于简洁表示线性方程组

例如:

\[\begin{cases} 2x+5y=10 \\ 4x+9y=39 \end{cases}\]

可以表示为:

\[\begin{bmatrix} 2 & 5 \\ 4 & 9 \end{bmatrix} \times \begin{bmatrix} x\\ y \end{bmatrix}\]

矩阵乘法

定义矩阵 \(A\) 为 \(n \times m\) 的矩阵,\(B\) 为 \(m \times q\) 的矩阵,且有矩阵 \(C\) 满足 \(C=A \times B\),则

\[C_{i,j}=\sum_{k=1}^{m}A_{i,k} B_{k,j} \]

矩阵快速幂

\(O(\log n)\) 求矩阵 \(A\) 的 \(A^n\)。

矩阵快速幂 \(=\) 矩阵乘法 \(+\) 快速幂

重点在封装结构体,注意一些细节。

struct Matrix{
	ll a[120][120];//有时也要维护行和列
   Matrix(){
     memset(a,0,sizeof(a));//清空!!
   }
	inline Matrix operator*(const Matrix &T) const{
		Matrix res;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				for(int k=1;k<=n;k++){
             		//数据过大时,使用快速乘
					res.a[i][k]+=a[i][j]*(T.a[j][k])%mod;//是+=!!
					res.a[i][k]%=mod;
				}
			}
		}
		return res;
	}
}x;
inline Matrix Mat_ksm(Matrix y,ll k){
	Matrix res;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			res.a[i][j]=y.a[i][j]%mod;
		}
	}
	k--;
	while(k>0){
		if(k&1) res=res*y;
		y=y*y;
		k=k>>1;
	}
	return res;
}

矩阵加速递推

使用矩阵快速幂,将 \(O(n)\) 的时间复杂度优化至 \(O(\log n)\)。

类似动态规划的状态转移,明确转移前后矩阵,根据递推式推出后矩阵用前矩阵表示的各个系数,再构造矩阵存下系数,对着构造的矩阵做快速幂,最后乘上初始矩阵。

重点是构造转移矩阵。

例如:P1707 刷题比赛
复杂的构造矩阵

P4910 帕秋莉的手环
矩阵优化 \(dp\)

标签:begin,Matrix,res,矩阵,笔记,times,学习,bmatrix
From: https://www.cnblogs.com/dayz-break/p/18339797

相关文章

  • 树的基础学习笔记
    树的直径定义:树上最长的简单路径。(可能有多条)树的直径的性质直径两端点一定是两个叶子节点。距离任意点最远的点一定是直径的一个端点,这个基于贪心求直径方法的正确性可以得出。对于两棵树,如果第一棵树直径两端点为(u,v),第二棵树直径两端点为\((x,y)\),用条边将两棵树......
  • OpenStack Yoga版安装笔记(十二)nova安装(下)
    5、InstallandconfigurecontrollernodeforUbuntu注意安装版本为:nova25.2.2.dev55.1Prerequisites在安装和配置compute service之前,需要先创建数据库、服务凭证(用户名/密码)、服务API端点。1、Createthedatabase:root@controller:~#mysqlWelcometotheMariaDB......
  • 科大讯飞学习机s30和t20pro区别对比
    1,屏幕二款都采用了高清类纸护眼屏,S30屏幕尺寸12英寸,分辨率2K,屏幕刷新率60Hz;T20Pro屏幕尺寸13.3英寸,分辨率2.5k,屏幕刷新率90Hz。2,处理器S30采用AI双引擎八核学习芯片;T20Pro搭载的是AI三引擎八核学习芯片。3,存储空间S30是8+256G;T20Pro8+512G。4,电池容量S30采用的7500mAh......
  • 嵌入式学习day9(string函数族)
    一丶strcpy和strncpy1.strcpy    #include<string.h>    char*strcpy(char*dest,constchar*src);    功能:实现字符串复制    参数:char*dest:目标字符串首地址    constchar*src:原字符串首地址    返回值:目标字符串首地......
  • Java学习第五周
    packagecom.sxt;publicclassTestSwitch01{publicstaticvoidmain(String[]args){intgrade=(int)(Math.random()*4)+1;//大学的年级switch(grade){case1:System.out.println("大一");break;case2:System.out.println("大二");break;case3:......
  • 学习Java第五周
    本周学习一、类的继承1.继承特点修饰符classSubClassextendsSuperClass{//类定义部分}表明继承了SuperClass类。注:子类只能从被扩展的父类获得成员变量、方法和内部类(包括内部接口、枚举),不能获得构造器和初始化块。2.Java类只能有一个直接父类,实际上,Java类可以有......
  • Python学习笔记51:暂停篇
    随便写点最近因为公司项目的原因,学习进度变慢很多,但是也勉强支撑着把小游戏的项目写了个大概,其实后续很多的功能基本都是慢慢添加就可以,掌握了函数的调用,磕磕碰碰终究还是能把功能写好的,可能就是代码质量差一点,但是这个没必要过于纠结,写的多了看的多了,慢慢的就会进步。一......
  • Windows令牌窃取提权和烂土豆提权学习
    令牌,又叫token,是系统临时产生的秘钥,相当于账号密码,用来决定是否允许此次请求和判断此次请求是属于哪一个用户。令牌无需提供密码或其他凭证,就可以访问网络和系统资源,这些令牌持续于系统中,除非系统重新启动。令牌的最大特点就是随机性,不可预测,无法猜解。当不同的用户登录计算机......
  • 8.3学习周记
    一.C语言学习1.数值输出(以整数为例):数值占3位%3d默认为右对齐左对齐要加负号变为%-3d2.字符串相关函数的学习:(数组1指向字符串1,数组2指向字符串2)a.strstr函数:strstr函数搜索字符串1是否在字符串2中出现,若未搜索到,则返回NULL;若搜索到,则该函数返回第一次出现s2的地址。b.strcpy......
  • Java毕业设计基于微信小程序的在线学习和测试系统 Uniapp
    文末获取资源,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍随着信息时代的快速发展,互联网的优势和普及,人们生活水平的不断提高,工作时间的繁忙,使得在线学习平台的开发成为必需。在线学习平台主要是借助计算机,通过对在线学习平台管理所需的信......