zoukankan      html  css  js  c++  java
  • 矩阵快速幂

    矩阵快速:由于矩阵乘法具有结合律,因此对于矩阵A,有A^4 = A * A * A * A = (A*A) * (A*A) = A^2 * A^2。我们可以得到这样的结论:当n为偶数时,A^n = A^(n/2) * A^(n/2);当n为奇数时,A^n = A^(n/2) * A^(n/2) * A (其中n/2取整)。
     

    递归:

    struct martrix
    {
        int m[maxn][maxn];
    };
    martrix mtmul(martrix a,martrix b)
    {
        martrix c;
        int i,j,k;
        for(i = 0; i < n; i++)
        {
            for(j = 0; j < n;j++)
            {
                c.m[i][j] = 0;
                for(k = 0 ; k < n;k++)
                {
                    c.m[i][j] += a.m[i][k] * b.m[k][j];
                    c.m[i][j] %=mod;
                }
            }
        }


        return c;
    }

     优化的乘法

     1 /*matrix mtmul(matrix a,matrix b)
     2 {
     3     int i,j,k;
     4     matrix c;
     5     c.clear();
     6     for(i =0 ; i <= n;i++)
     7     {
     8         for(k = 0; k <=n;k++)
     9         {
    10 
    11             if(a.m[i][k])//优化
    12             for(j = 0 ; j <=n;j++)
    13             {
    14                 c.m[i][j] += a.m[i][k]*b.m[k][j];
    15 
    16             }
    17         }
    18     }
    19     return c;
    20 }*/

    martrix mtpow(martrix d,int k)
    {   martrix a;
        if(k == 1return d;
        int mid = k / 2;
        a = mtpow(d,k/2);
        a = mtmul(a,a);
        if(k & 1)
        {
            a = mtmul(a,d);
        }
        return a;


    }

    非递归:

     e.m[i][i] = 1 ;

    martrix mtpow(martrix d,int k)
    {   martrix a;
        a = e;//e 为单位矩阵
       while(k)
       {
           if(k&1)
           {
               a = mtmul(a,d);
           }
           k/=2;
           d = mtmul(d,d);
       }
       return a;

    }

                                                                                                                                                                                                               

  • 相关阅读:
    git checkout 命令详解
    Ubuntu下配置samba实现文件夹共享
    修改Apache配置文件开启gzip压缩传输
    java调用shell获取返回值
    VMWARE虚拟机CentOS6.4系统使用主机无线网卡上网的三种方法介绍
    Source Insight 3.X utf8支持插件震撼发布
    Sizeof与Strlen的区别与联系
    推荐!手把手教你使用Git
    base64编码、解码的C语言实现
    C语言中main函数的参数
  • 原文地址:https://www.cnblogs.com/acSzz/p/2647243.html
Copyright © 2011-2022 走看看