版权声明:本文为hzy原创文章,未经博主允许不可随意转载。 https://blog.csdn.net/Binary_Heap/article/details/82155754
矩阵乘法
定义
一个
n×m
矩阵
A
乘上一个
m×p
的矩阵
B
,得到一个
n×p
的矩阵
C
:
Ci,j=∑mk=1Ai,k×Bk,j(1≤i≤n,1≤j≤p)
也就是说,新矩阵的第
i
行第
j
个数为
A
的第
i
行与
B
的第
j
列对应相乘再相加的结果
优化递推
例如拿斐波那契数列举例
已知
f(1)=f(2)=1,f(i)=f(i−1)+f(i−2)(i>2)
求
f(n)mod(109+7),n<=2∗109
这里用O(n)的复杂度递推显然超时。可以考虑:
一个矩阵
[f(i),f(i−1)]∗A=[f(i+1),f(i)]
能否找到这样一个转移矩阵
A
?
可以找到:
[1110]
因此,求
f(n)
只要做
n−2
次
(n>2)
矩阵快速幂,复杂度为
O(logn)
.
矩阵快速幂
把普通的快速幂中的乘法改为矩阵乘法即可。
推荐例题
模板:
LibreOJ 100 矩阵乘法模板
Luogu P3390 矩阵快速幂模板
Luogu P1939 矩阵加速模板
矩阵加速线性递推的近似模板题:
Luogu P1962 斐波那契数列
Luogu P1349 广义斐波那契数列
Luogu P1306 斐波那契公约数
NOI2012 随机数生成器
矩阵快速幂与DP:
Luogu P2106 Sam数