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

    (1)矩阵乘法

    简单的说矩阵就是二维数组,数存在里面,矩阵乘法的规则:A*B=C

    其中c[i][j]为A的第i行与B的第j列对应乘积的和,即:

    模板 :

    const int N=10;
    int tmp[N][N];
    void multi(int a[][N],int b[][N],int n)
    {
        memset(tmp,0,sizeof tmp);
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
            for(int k=0;k<n;k++)
            tmp[i][j]+=a[i][k]*b[k][j];
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
            a[i][j]=tmp[i][j];
    }
    int res[N][N];
    void Pow(int a[][N],int n)
    {
        memset(res,0,sizeof res);//n是幂,N是矩阵大小
        for(int i=0;i<N;i++) res[i][i]=1;
        while(n)
        {
            if(n&1)
                multi(res,a,N);//res=res*a;复制直接在multi里面实现了;
            multi(a,a,N);//a=a*a
            n>>=1;
        }
    }

    不过上诉res数组就等同于普通快速幂初始化的1,原理想通的,这个矩阵叫单位矩阵E,性质就是E*A=A,就是1*a=a,一样,单位矩阵就是对角线全是1其他全是0;

  • 相关阅读:
    php算法之选择排序
    php算法之插入排序
    五分钟读懂UML类图
    ZC_知识点
    JNI_C#
    JNI_Z
    20160419__第1课_第6课
    Hibernate异常_01
    ZC_注意点
    ZC_知识点
  • 原文地址:https://www.cnblogs.com/Leozi/p/13281228.html
Copyright © 2011-2022 走看看