矩阵快速幂算法笔记
a[i]=a[i-1]+b[i-1]+1, b[i]=2*a[i-1]-5 ; a[1]=1,b[1]=1, 问a[x]=?,b[x]=?
很简单的递推,一步步推即可,但是,如果x是10^9,如何推?
思维:递推式可以化为矩阵乘积
那么,矩阵A[i]=A[i-1]B;
A[i+1]=A[i]B=A[i-1]BB
A[x]=A[1]BBB.......=A[1]( B^(x-1) );
因为矩阵乘积可以换乘积顺序,所以可以先算出B^(x-1),如何计算呢?
快速幂!
问题迎刃而解~
1.构造出递推矩阵
2.对构造出的矩阵B,进行B^x的快速幂,乘积换成矩阵乘法。
3.最后矩阵的第一行第一列和第二列就是a[x]和a[y]。
其实快速幂和矩阵快速幂是异曲同工,但是往往构造矩阵是难点,转载一个别人博客写的矩阵构造方法: