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;

    }

                                                                                                                                                                                                               

  • 相关阅读:
    hdoj 2803 The MAX【简单规律题】
    hdoj 2579 Dating with girls(2)【三重数组标记去重】
    hdoj 1495 非常可乐【bfs隐式图】
    poj 1149 PIGS【最大流经典建图】
    poj 3281 Dining【拆点网络流】
    hdoj 3572 Task Schedule【建立超级源点超级汇点】
    hdoj 1532 Drainage Ditches【最大流模板题】
    poj 1459 Power Network【建立超级源点,超级汇点】
    hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】
    hdoj 1012 u Calculate e
  • 原文地址:https://www.cnblogs.com/acSzz/p/2647243.html
Copyright © 2011-2022 走看看