关于矩阵快速幂の简单粗暴の理解

今天做题遇到了矩阵快速幂,找了半天博客都没看懂
最后还是看代码自己悟。所以这里我就把自己的理解
写出来,有不对的欢迎指正。
真正理解后感觉也就没几句话就讲完了,首先我们看
一下数的快速幂

ll Mypow(ll a,ll b)
{
    ll re = 1;
    while(b)
    {
        if(b&1)re *= a;
        a *= a;
        b >>= 1;
    }
    return re;
}

数的快速幂我想大家都理解(如果不理解请自行百度),而矩阵快速幂和数类似,我们可以比较来理解。
先看看矩阵快速幂:

#define n 2;//矩阵大小 

struct Matrix // 定义矩阵
{
    int a[n][n];
    Matrix()
    {
        memset(a,0,sizeof(a));
    }
};

Matrix mul(Matrix a,Matrix b)//矩阵乘法
{
    Matrix ans;
    for(int i=0 ; i<n ; i++)
    {
        for(int k=0 ; k<n ; k++)
        {
            if(a.a[i][k])
            for(int j=0 ; j<n ; j++)
            {
                ans.a[i][j]+=a.a[i][k]*b.a[k][j];
            }
        }
    }
    return ans;
}
Matrix Mypow(Matrix a,int N)
{
    Matrix re;
    for(int i=0 ; i<n ; i++)re.a[i][i] = 1;

    while(N)
    {
        if(N&1)re = mul(re,a);
        a = mul(a,a);
        N >>= 1;
    }
    return re;
}

很明显,除了矩阵乘法,矩阵定义与普通的数不一样以外Mypow中的结构基本一样。只是一点,数的快速幂中最开始是1,而矩阵中是单位矩阵。

相关题链接:http://blog.csdn.net/vocaloid01/article/details/78155053

posted @ 2017-10-03 16:23  Assassin_poi君  阅读(169)  评论(0编辑  收藏  举报