zoukankan      html  css  js  c++  java
  • 关于矩阵快速幂の简单粗暴の理解

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

    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

  • 相关阅读:
    单调栈问题解析
    Linux进程状态切换
    Shell编程小例子
    Linux之shell编程
    树的遍历框架
    你真的会求1-100有多少个素数吗
    java实现LRU算法
    从上到下打印二叉树 III
    从上到下打印二叉树I
    模拟盘电路板调试过程中出现的问题
  • 原文地址:https://www.cnblogs.com/vocaloid01/p/9514233.html
Copyright © 2011-2022 走看看