1. 程式人生 > >矩陣乘法及矩陣鏈乘的快速冪優化

矩陣乘法及矩陣鏈乘的快速冪優化

urn pan 乘法 color memset blog div for truct

一、矩陣乘法

 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 }

矩陣乘法及矩陣鏈乘的快速冪優化