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

    PART1 矩阵乘法

    矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。

    e.g.

    PART 2 快速幂

    快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。

    PART3 矩阵快速幂

    顾名思义,矩阵快速幂就是以快速幂的思想进行矩阵乘法(洛谷p3390),代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    struct node{
          long long g[1001][1001];
    }res;
    int n;
    node operator * (node a,node b){
          node c;
          long long x;
          for(int i=1;i<=n;i++)
             for(int j=1;j<=n;j++){
                 x=0;
                 for(int k=1;k<=n;k++)
                    x+=(a.g[i][k]*b.g[k][j])%1000000007;
                 c.g[i][j]=(x)%1000000007;
             }
          return c;
    }
    void go(node a,long long k){
          res=a;
          while(k){
              if(k&1){
                  res=res*a;
              }
              a=a*a;
              k>>=1;
          }
    }
    int main()
    {     int m,i,j;
          long long k;
          node a;
          cin>>n>>k;
          for(i=1;i<=n;i++)
             for(j=1;j<=n;j++){
                 scanf("%lld",&a.g[i][j]);
             }
          go(a,k-1);
          for(i=1;i<=n;i++){
             for(j=1;j<=n;j++){
                 printf("%lld ",res.g[i][j]);
             }
             puts("");
          }
          return 0;
    }

  • 相关阅读:
    Apache Kafka:下一代分布式消息系统
    深入理解Java之线程池
    JAVA中线程同步的方法(7种)汇总
    String、StringBuffer与StringBuilder之间区别
    Java中是否可以继承String类,为什么
    JAVA4种线程池的使用
    一分钟教你知道乐观锁和悲观锁的区别
    java常见面试题及答案 11-20(JVM)
    springmvc中的页面解析器ViewResolver不起作用,变量输出字符串的解决方案
    SpringMVC默认欢迎页面的问题
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/8410450.html
Copyright © 2011-2022 走看看