矩阵初步

矩阵,主要用于递推/dp优化,以及特别的题目。

运算:

注意,矩阵有+,,,pow以及矩阵的逆等运算。本文讨论入门的+,,,pow.

对于加法:

[135247]+[2971293]

即为:

[31212141310]

就是遵循按位相加的原则,减法同理。
注意矩阵的加减法必须是同行数同列数的矩阵。

对于乘法:

定义Ci,jA,B两个矩阵乘完之后的矩阵对应的第i行第j列的元素。

规定APM的矩阵,BMQ的矩阵。

则有:

Ci,j=k=1MAi,kBk,j

也可以简单理解为,对应行乘以对应列。

矩阵快速幂#

就是一个矩阵的乘方。

注意,只有方阵才有乘方,即列数等于行数(nn)

同样地,若求一个矩阵的k次方,可以和二进制快速幂一样,重载乘法即可。

注意提到一个概念:矩阵中,和1一样的存在是谁呢?我们称之为 $单位矩阵 ,就是对角线上都是1,其它位置都是0的矩阵。

通过矩阵乘法定义会发现,一个矩阵乘以单位矩阵(称之为I)等于它本身。

一个简单的单位矩阵:

[100010001]

代码实现:

struct matrix{
	ll a[4][4];
	matrix(){memset(a,0,sizeof(a));}
	matrix operator*(const matrix&b)const{
		matrix res;
		for(int i=1;i<=2;++i)
			for(int j=1;j<=2;++j)
				for(int k=1;k<=2;++k)
					res.a[i][j]=(res.a[i][j]+a[i][k]*b.a[k][j])%mod;
		return res;
	}
}base,ans;
void qpow(int b){
	while(b){
		if(b&1)ans=ans*base;
		base=base*base;b>>=1;
	}
}

待补QwQ

posted @   Refined_heart  阅读(657)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示