矩阵快速乘法---代码

矩阵乘法的核心代码:

while(N)
 {
                if(N&1)
                       res=res*A;
                n>>=1;
                A=A*A;
 }

然后是示例代码:

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <iostream> 
using namespace std;

int N;

struct matrix
{
       int a[3][3];
}origin,res;


matrix multiply(matrix x,matrix y)
{
       matrix temp;
       memset(temp.a,0,sizeof(temp.a));
       for(int i=0;i<3;i++)
       {
               for(int j=0;j<3;j++)
               {
                       for(int k=0;k<3;k++)
                       {
                               temp.a[i][j]+=x.a[i][k]*y.a[k][j];
                       }
               }
       }
       return temp;
}

void init()
{
     printf("随机数组如下:\n");
     for(int i=0;i<3;i++)
     {
             for(int j=0;j<3;j++)
             {
                     origin.a[i][j]=rand()%10;
                     printf("%8d",origin.a[i][j]);
             }
             printf("\n");
     }
     printf("\n");
     memset(res.a,0,sizeof(res.a));
     res.a[0][0]=res.a[1][1]=res.a[2][2]=1;                  //将res.a初始化为单位矩阵 
}

void calc(int n)
{
     while(n)
     {
             if(n&1)
                    res=multiply(res,origin);
             n>>=1;
             origin=multiply(origin,origin);
     }
     printf("%d次幂结果如下:\n",n);
     for(int i=0;i<3;i++)
     {
             for(int j=0;j<3;j++)
                     printf("%8d",res.a[i][j]);
             printf("\n");
     }
     printf("\n");
}
int main()
{
    while(cin>>N)
    {
            init();
            calc(N);
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
稀疏矩阵快速转置是一种优化算法,用于将稀疏矩阵的行和列互换,从而得到转置矩阵。下面是伪代码: status FastTransposeSMatrix(TSMatrix M, TSMatrix *T){ //采用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵T int col,t,p; T->mu = M.nu; T->nu = M.mu; T->tu = M.tu; if(T->tu) { for(col = 1;col <= M.nu; ++col) num[col]=0; for(t = 1; t <= M.tu; ++t) ++num[M.data[t].j]; cpot=1; //求第col列中第一个非零元在b.data中的序号 for(col=2;col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1]; for(p=1;p<=M.tu;++p) { col=M.data[p].j; q=cpot[col]; T->data[q].i=M.data[p].j; T->data[q].j=M.data[p].i; T->data[q].e=M.data[p].e; ++cpot[col]; }//for }//if return OK; } 矩阵乘法是一种常见的矩阵运算,用于计算两个矩阵的乘积。下面是矩阵乘法的伪代码: status MatrixMultiply(SMatrix A, SMatrix B, SMatrix *C){ //稀疏矩阵乘法,将矩阵A和B相乘,结果存储在矩阵C中 if(A.nu != B.mu) return ERROR; int i,j,k,p,q,t=0; int ctemp[MAXSIZE+1]; for(i=1;i<=A.mu;++i){ for(j=1;j<=B.nu;++j) ctemp[j]=0; C->rpos[i]=t+1; if(i<A.mu) p=A.rpos[i+1]; else p=A.tu+1; for(k=A.rpos[i];k<p;++k){ if(A.data[k].e==0) continue; if(B.rpos[A.data[k].j+1]==B.rpos[A.data[k].j]) continue; q=B.rpos[A.data[k].j+1]-1; for(t=B.rpos[A.data[k].j];t<=q;++t){ j=B.data[t].j; ctemp[j]+=A.data[k].e*B.data[t].e; }//for }//for for(j=1;j<=B.nu;++j){ if(ctemp[j]){ if(++t>C->tu) return ERROR; C->data[t].i=i; C->data[t].j=j; C->data[t].e=ctemp[j]; }//if }//for }//for C->rpos[A.mu+1]=C->tu+1; C->mu=A.mu; C->nu=B.nu; return OK; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值