矩阵快速幂
矩阵的快速幂是用来高效地计算矩阵的高次方的。将朴素的o(n)的时间复杂度,降到log(n)。
这里先对原理(主要运用了矩阵乘法的结合律)做下简单形象的介绍:
一般一个矩阵的n次方,我们会通过连乘n-1次来得到它的n次幂。
但做下简单的改进就能减少连乘的次数,方法如下:
把n个矩阵进行两两分组,比如:A*A*A*A*A*A => (A*A)(A*A)(A*A)
这样变的好处是,你只需要计算一次A*A,然后将结果(A*A)连乘自己两次就能得到A^6,即(A*A)^3=A^6。算一下发现这次一共乘了3次,少于原来的5次。
矩阵快速幂的Java代码如下:
public int[][] quickMatrix(int[][] A,int n){
//参数的含义: 将矩阵A连乘n次,也就是A^n
if(n==1) return A;
if(n%2==1)
return quickMatrix(A,n-1)*A; //这里的乘号*代表的是矩阵相乘
else{
int[][] temp=quickMatrix(A,n/2);
return temp*temp;
}
}
第六届蓝桥杯Java A组第九题需要用到矩阵快速幂,可以移步到:
http://blog.csdn.net/weixin_40423553/article/category/7494205