随笔 - 22  文章 - 0 评论 - 0 阅读 - 534

1.矩阵乘法

设矩阵有 H 行,L 列,则两个矩阵 MatA,MatB 进行乘法,需要满足 MatA.L=MatB.H。则结果矩阵 MatRi,j=z=1nMatAi,zMatBz,j

性质: 结合律,但不满足交换律。

mat operator *(mat a,mat b)
{
	mat c;
	memset(c.mat,0,sizeof(c.mat));
	for(int k=1;k<=n;k++)
	{
		for(int i=1;i<=n;i++)
		{
			for(int z=1;z<=n;z++)
			{
				c.mat[i][z]+=a.mat[i][k]*b.mat[k][z]%mod;
				c.mat[i][z]%=mod;
			}
		}
	}
	return c;
}

2.矩阵快速幂

由于结合律,我们可以使用类似一般快速幂的方法快速计算 Matk

值得注意的是,初始矩阵要满足 MatRi,i=1

mat operator ^(mat a,int b)
{
	mat c;
	memset(c.mat,0,sizeof(c.mat));
	for(int i=1;i<=n;i++)
	{
		c.mat[i][i]=1;
	}
	while(b)
	{
		if(b&1)
		{
			c=c*a;
		}
		a=a*a;
		b>>=1;
	}
	return c;
}

3.用处

用于加速递推。下面是斐波那契数列的推导:

fi+1=fi+fi1

[fi1fi]MatDT=[fifi+1]

MatDT=[1 11 0]

[fi1fi][1 11 0]=[fi1+fi11fi1+fi10]=[fifi+1]

posted on   lizhous  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示