矩阵乘法
定义
一个 n×m n × m 矩阵 A A 乘上一个的矩阵 B B ,得到一个的矩阵 C C :
也就是说,新矩阵的第 i i 行第个数为 A A 的第行与 B B 的第列对应相乘再相加的结果
优化递推
例如拿斐波那契数列举例
已知 f(1)=f(2)=1,f(i)=f(i−1)+f(i−2)(i>2) f ( 1 ) = f ( 2 ) = 1 , f ( i ) = f ( i − 1 ) + f ( i − 2 ) ( i > 2 )
求 f(n)mod(109+7),n<=2∗109 f ( n ) m o d ( 10 9 + 7 ) , n <= 2 ∗ 10 9
这里用O(n)的复杂度递推显然超时。可以考虑:
一个矩阵 [f(i),f(i−1)]∗A=[f(i+1),f(i)] [ f ( i ) , f ( i − 1 ) ] ∗ A = [ f ( i + 1 ) , f ( i ) ]
能否找到这样一个转移矩阵 A A ?
可以找到:
因此,求 f(n) f ( n ) 只要做 n−2 n − 2 次 (n>2) ( n > 2 ) 矩阵快速幂,复杂度为 O(logn) O ( l o g n ) .
矩阵快速幂
把普通的快速幂中的乘法改为矩阵乘法即可。
推荐例题
模板:
矩阵加速线性递推的近似模板题:
矩阵快速幂与DP: