矩阵相乘入门,两个矩阵相乘

来源:互联网 发布:网络装修公司 编辑:程序博客网 时间:2024/05/29 18:04
矩阵:矩阵可以看成一个n×m的数表,用二维数组表示
矩阵乘法:定义矩阵A,BAB可以乘法操作当且仅当A的大小是a×bB的大小是b×c,设矩阵C=AB,则C的大小是a×c,且有

    最普通的矩阵乘法是直接三个for循环直接计算而已,所以复杂度是On3

#include<iostream>using namespace std;int main(){int i,j,k;const int m=3,r=4,n=3;int a[m][r],b[r][n],c[m][n]={0};  //之前别忘清0 cout<<"请输入a矩阵:"<<endl;for(i=0;i<m;i++)     for(j=0;j<r;j++)   cin>>a[j];cout<<"请输入b矩阵:"<<endl;for(i=0;i<r;i++)  for(j=0;j<n;j++)   cin>>b[j];cout<<"两矩阵的积为:"<<endl;   for(i=0;i<m;i++)   for(j=0;j<n;j++)  {for(k=0;k<r;k++)  c[j]=c[j]+a[k]*b[k][j];  cout<<c[j]<<" ";  if(j==n-1) cout<<endl;}      //使用这个方法可输出矩阵格式  return 0;}

先了解连那个简单的矩阵相乘,然后再来

快速幂:矩阵的快速幂是用来高效地计算矩阵的高次方的。将朴素的On)的时间复杂度,降到Ologn

    大家首先要认识到这一点:任何一个整数N,都能用二进制来表示

    例如:25      二进制表示为  11001

运用矩阵乘法快速幂,可以快速计算出矩阵B^(n-1),这样实现将时间复杂度降低到O(log n)

 

 

 首先将这n次置换“合并”起来(算出这n次置换的乘积),然后接下来我们需要执行这个置换即可。注意任意一个置换都可以表示成矩阵的形式。

   上面的例子矩阵为: 0  1   0   0   0

                                            1   0   0   0   0

                                            0   0   1   0   0

                                            0   0   0   0   1

                                            0   0   0   1   0

 

    

原创粉丝点击