当前位置: 首页 > news >正文

矩阵快速幂

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;
}

转载于:https://www.cnblogs.com/yzxverygood/p/8410450.html

相关文章:

  • net ria services数据验证调试技巧
  • javascript 哈希表
  • wcf实现IP访问限制
  • jrtplib编译指南
  • TCP 10054
  • Windows Phone 7 Belling‘s课堂(七) 独立存储空间(3)
  • office web apps server安装部署
  • makefile
  • (转)程序员疫苗:代码注入
  • 为Linux-3.10.1内核添加系统调用
  • enterprise library 5 unity使用方法
  • 设计的MOS管三极管简单开关电路驱动能力不够2
  • 大数据||HDFS||NameNode启动过程详解
  • [短彩信]C#短彩信模块开发设计(2)——配置
  • Java里面CompletableFuture详解
  • AngularJS指令开发(1)——参数详解
  • httpie使用详解
  • JavaScript设计模式与开发实践系列之策略模式
  • k8s如何管理Pod
  • Kibana配置logstash,报表一体化
  • Lsb图片隐写
  • MySQL数据库运维之数据恢复
  • node和express搭建代理服务器(源码)
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • 当SetTimeout遇到了字符串
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 关于extract.autodesk.io的一些说明
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • #vue3 实现前端下载excel文件模板功能
  • #微信小程序:微信小程序常见的配置传旨
  • (007)XHTML文档之标题——h1~h6
  • (13):Silverlight 2 数据与通信之WebRequest
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (十七)Flink 容错机制
  • (学习总结16)C++模版2
  • (原)Matlab的svmtrain和svmclassify
  • (状压dp)uva 10817 Headmaster's Headache
  • .env.development、.env.production、.env.staging
  • .Net 8.0 新的变化
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net mvc 获取url中controller和action
  • .NET Remoting学习笔记(三)信道
  • .net Stream篇(六)
  • .netcore如何运行环境安装到Linux服务器
  • .Net的C#语言取月份数值对应的MonthName值
  • .net和jar包windows服务部署
  • .sh 的运行
  • @RequestBody与@RequestParam
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [ACP云计算]易混淆知识点(考题总结)
  • [Design Pattern] 工厂方法模式
  • [FFmpeg学习]从视频中获取图片