矩阵乘法及矩阵链乘的快速幂优化
Posted 远见望远
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了矩阵乘法及矩阵链乘的快速幂优化相关的知识,希望对你有一定的参考价值。
一、矩阵乘法
1 struct datatype 2 { 3 int a[2][2]; 4 }; 5 datatype multiple(datatype x,datatype y) 6 { 7 datatype res; 8 memset(res.a,0,sizeof(res.a)); 9 for(int i=0;i<=1;i++) 10 { 11 for(int j=0;j<=1;j++) 12 { 13 for(int k=0;k<=1;k++) 14 { 15 res.a[i][j]+=x.a[i][k]*y.a[k][j]; 16 } 17 } 18 } 19 for(int i=0;i<=1;i++) 20 { 21 for(int j=0;j<=1;j++) 22 { 23 res.a[i][j]%=10000; 24 } 25 } 26 return res; 27 }
二、矩阵链乘的快速幂优化
1 struct datatype 2 { 3 int a[2][2]; 4 }; 5 datatype multiple(datatype x,datatype y) 6 { 7 datatype res; 8 memset(res.a,0,sizeof(res.a)); 9 for(int i=0;i<=1;i++) 10 { 11 for(int j=0;j<=1;j++) 12 { 13 for(int k=0;k<=1;k++) 14 { 15 res.a[i][j]+=x.a[i][k]*y.a[k][j]; 16 } 17 } 18 } 19 for(int i=0;i<=1;i++) 20 { 21 for(int j=0;j<=1;j++) 22 { 23 res.a[i][j]%=10000; 24 } 25 } 26 return res; 27 } 28 datatype power(datatype x,int y) 29 { 30 datatype res,t; 31 res.a[0][0]=1; 32 res.a[0][1]=0; 33 res.a[1][0]=0; 34 res.a[1][1]=1; 35 t=x; 36 while(y) 37 { 38 if(y&1) 39 { 40 res=multiple(res,t); 41 } 42 t=multiple(t,t); 43 y>>=1; 44 } 45 return res; 46 }
以上是关于矩阵乘法及矩阵链乘的快速幂优化的主要内容,如果未能解决你的问题,请参考以下文章
poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化