一、基础知识

(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. MySQL基本用户授权步骤
  2. nodejs-REPL/回调函数/事件循环
  3. Windows server 2008 R2远程桌面3389端口号修改
  4. Unity5x编辑器的视图二
  5. Java好学吗 没基础能学会吗
  6. java规则表达式_Java基础--正则表达式的规则
  7. Linux下的图形库curses写贪吃蛇,酷
  8. statement的增删改查和动态的增删改查
  9. 【JSP】JSP的四种作用域
  10. java netty post_API调用Netty长链接执行发送消息(在线数、用户列表)
  11. CodeForces 785C Anton and Fairy Tale 二分
  12. java查询数据库数据放到Excel下载
  13. python 3.28 第三章 函数嵌套/名称空间//内置名称空间/全局名称空间/局部名称空间/作用域/函数对象/闭包函数。...
  14. tts文字转语音_Android文字转语音(TTS)
  15. Oracle根据外键名称查找关联的表与列
  16. php日文文件名 liunx,linux文件名乱码
  17. 感知器 - 西瓜好坏自动识别——python
  18. win10去掉快捷方式小箭头_Win10系统去除桌面快捷方式小箭头图标的三种方法
  19. Symfony框架系列----常用命令
  20. 【Matlab】评估网络节点重要性

热门文章

  1. Linux部署动态网页,Nginx发布支持动态配置的开源Web服务器
  2. Zencart的首页php 301,Zencart 做了301重定向后不能登陆网站后台的解决方案
  3. python将object转换为float_将pandas系列类型从object转换为float64
  4. python背包问题并行_python基于递归解决背包问题详解
  5. python verilog顶层连线,如何在Verilog中连接两个模块?
  6. 化工原理 蒸馏(下)
  7. 博后招募 | 清华大学电子系姚权铭教授招聘机器学习方向博士后
  8. DNN盛行的当下,老旧的核(kernel)方法或能打开神经网络的魔盒
  9. 基于动态提前退出的预训练模型推理加速简介
  10. 我用这个框架拿了Kaggle大赛冠军