C / C ++中的快速整数矩阵求幂算法

时间:2014-02-17 07:30:20

标签: c algorithm

如何实现快速nxn整数矩阵求幂算法M ^ n
矩阵不是对角线的,也不是对称的 我已经实施了Squaring的algo Exponentiation,但我知道有更快的算法 我不想使用数值库。

特征向量/值答案可用于所有对称矩阵,但不适用于所有矩阵,我需要一个通用的算法。因此,我的问题需要其他答案,而不是您指出的上一个答案,并将我的问题标记为重复。

这是我的Squaring Expo代码,但我需要一个更快的算法: ww是矩阵的大小

void expo(int ww, ll n)
{
   int i,j,k;
   memset(ret,0,SZ);
   for(i=0;i<ww;i++)ret[i][i]=1;
   while(n){
     if(n&1){
       memset(tmp,0,SZ);
       for(i=0;i<ww;i++)
         for(j=0;j<ww;j++)
           for(k=0;k<ww;k++)
             tmp[i][j]+=ret[i][k]*mat[k][j];
       memcpy(ret,tmp,SZ);
     }
     memset(tmp,0,SZ);
     for(i=0;i<ww;i++) 
       for(j=0;j<ww;j++)
         for(k=0;k<ww;k++)
           tmp[i][j]+=mat[i][k]*mat[k][j];
     memcpy(mat,tmp,SZ);
     n>>=1;
   }
 }

0 个答案:

没有答案