一、基础知识

(1)矩阵乘法

https://blog.csdn.net/weixin_43272781/article/details/82899737

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

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

代码:

const int N=100;
int c[N][N];
void multi(int a[][N],int b[][N],int n)//n是矩阵大小,n<N
{memset(c,0,sizeof c);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)for(int k=1;k<=n;k++)c[i][j]+=a[i][k]*b[k][j];
}

另一种写法:

int c[N][N];
void multi(int a[][N],int b[][N],int n)
{memset(c,0,sizeof c);for(int i=1;i<=n;i++)for(int k=1;k<=n;k++)for(int j=1;j<=n;j++)c[i][j]+=a[i][k]*b[k][j];
}

这种可以在第二重for判断if(a[i][k]==0)continue;对于矩阵有较多0的有一定效果。不过一般第一种写法就够了,这种知道就行。
显然矩阵乘法的复杂度是O(n^3);(O(n^2.7)的方法不会写,无视这里)。

这里我直接写的是n*n的矩阵(即方阵),显然两个相乘是要一行和一列对应乘,那么矩阵乘法是需要A的行数与B的列数相等的(这是A*B的前提条件,可见矩阵的乘法是不满足交换律的)。然而这些一般都是没什么用的,矩阵快速幂只会用到方阵(除非题目是裸的矩阵乘法)。矩阵快速幂都是方阵也就避免的相乘的前提条件,可以放心用。

二、矩阵构造方法

https://blog.csdn.net/weixin_43272781/article/details/88878064

三、矩阵快速幂

如果不知道快速幂的请参考:https://blog.csdn.net/weixin_43272781/article/details/85058595

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*an>>=1;}
}

值得注意的是矩阵快速幂只适用于n*n的矩阵方阵。

四、例题

http://poj.org/problem?id=3070

http://poj.org/problem?id=3233

http://acm.hdu.edu.cn/showproblem.php?pid=2276

http://acm.hdu.edu.cn/showproblem.php?pid=5015

https://ac.nowcoder.com/acm/contest/338/L(题解:https://blog.csdn.net/weixin_43272781/article/details/85937715)

http://acm.hdu.edu.cn/showproblem.php?pid=3306

http://acm.hdu.edu.cn/showproblem.php?pid=2157(题解:https://blog.csdn.net/weixin_43272781/article/details/88958713)

五、参考文章

http://www.matrix67.com/blog/archives/276

http://www.cnblogs.com/frog112111/archive/2013/05/19/3087648.html?tdsourcetag=s_pcqq_aiomsg

https://www.cnblogs.com/frog112111/archive/2013/05/15/3080678.html

https://www.cnblogs.com/frog112111/archive/2013/05/16/3081493.html

https://www.cnblogs.com/frog112111/archive/2013/05/16/3082416.html

https://www.cnblogs.com/frog112111/archive/2013/05/20/3089358.html

https://www.cnblogs.com/frog112111/archive/2013/05/20/3089687.html

https://www.cnblogs.com/frog112111/archive/2013/05/21/3089953.html

https://www.cnblogs.com/frog112111/archive/2013/05/22/3092012.html

https://www.cnblogs.com/frog112111/archive/2013/05/20/3089802.html

https://www.cnblogs.com/frog112111/archive/2013/05/22/3093697.html

https://www.cnblogs.com/frog112111/archive/2013/05/22/3093757.html

矩阵快速幂(Matrix_Fast_Power)相关推荐

  1. 矩阵快速幂+构造方法

    与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解 大概的板子如下: struct mat///自己定义大小的矩阵 {ll m[11][11]; }; mat mul ...

  2. 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂

    原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...

  3. 快速幂 + 矩阵快速幂

    快速幂 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #define LL lo ...

  4. HDU4549(矩阵快速幂+快速幂)

    f(n)=a^f(n-1) + b^f(n-2):计算矩阵部分用矩阵快速幂:计算a的幂次和b的幂次用快速幂. #include<iostream> #include<algorith ...

  5. [HNOI2008]GT考试[矩阵快速幂+kmp优化的dp]

    解题思路:假如说我们用f[i]表示长度为i的串能组合成无不吉利数字的组合的个数的话我们无法找到f[i]和f[i+1]的关系,就是我们下一位填某个数字会不会出现不吉利串,这就和你前面的串末尾于不吉利串重 ...

  6. I-Matrix Power Series POJ - 3233 矩阵快速幂+分治

    I-Matrix Power Series POJ - 3233 矩阵快速幂+分治 Problem Description Given a n × n matrix A and a positive ...

  7. H - Fibonacci POJ - 3070 (矩阵快速幂)

    H - Fibonacci POJ - 3070 (矩阵快速幂) Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and ...

  8. HDU 6185 Covering 矩阵快速幂 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...

  9. bzoj 1409 Password 矩阵快速幂+欧拉函数

    可以发现,该数组的mi就是斐波那契数列 所以要矩阵快速幂搞出第n位 但是斐波那契数列上涨的很快,这就需要欧拉定理了 p^phi(q)%q=1(gcd(p,q)==1) p是素数,所以可以用 然后需要5 ...

最新文章

  1. SAP HUM 如何将2个HU合并并成一个?
  2. 服务器异常代码413问题
  3. 【零散积累】传输文件(sz/rz/scp命令)
  4. LeetCode-MySQL196. 删除重复的电子邮箱
  5. HYSPLIT 教程 有关记录
  6. android 半浮层框架
  7. php实战视频教程 帝国cms二次开发,帝国cms7.5二次开发整合CKPlayer播放器教程
  8. 如何高效开展测试用例评审?附用例评审检查清单及用例评审报告模板
  9. 知识产权服务代理行业税收政策
  10. intel 服务器芯片型号怎么看,Intel CPU编号详解
  11. 外星人大战---------------------游戏开发
  12. python爬取微信制作照片墙
  13. Word中表的自动断开、且断开处有空白页面的问题之解决
  14. shader 处理cad线型 其中一小段的思路
  15. 大专毕业学的汽修想转行学计算机,机械转计算机后悔 机械转行学什么好
  16. Docker各平台下安装
  17. 谭安林:大数据在智能外呼系统的应用
  18. 汇聚创新 共创未来---记2016华为开发者大赛沙龙深圳站
  19. 短链接服务Octopus的实现与源码开放
  20. creo自定义调用零件库_cero基础设置教程,五步cero5.0设置调用自定义标准件的方法...

热门文章

  1. linux中安装httpd安装错误,linux安装httpd和nginx常见问题及解决办法
  2. python paramiko并发_使用Python paramiko模块利用多线程实现ssh并发执行操作
  3. oracle定时任务可以备份么,Linux下Oracle设置定时任务备份数据库的教程
  4. python获取计算机信息系统数据罪_工作心得:破坏计算机信息系统罪与非法获取计算机信息系统数据罪的区分...
  5. 下载Java Jar包的网站(托管厂库)
  6. JavaScript中的三种常用继承方法
  7. mysql group_concat distinct,如何在MySQL中使用GROUP_CONCAT和CONCAT与DISTINCT引用单列值?...
  8. 计算机系学生的职业生涯作文,医学生职业生涯规划的作文800字
  9. 六十一、Python中的smtplib和email实现邮件发送
  10. 北极约200万个甲烷点被发现,人类的反思该提上日程了,因为只有一个地球