在网上看到了很多关于矩阵快速幂算法的文章,但好像没有找到完整代码的 有也不是java而是c c++的。自己整理了一下,用java把程序写了出来。
对这个也不算精通吧 也是本着学习的目的,如果有错误,欢迎指正。
原本打算建一个矩阵类的,后来想了想直接就用数组吧 其实核心代码就那几句 也是从网上查阅到的 就是 java 不像c一样 可以把int类型数据直接进行逻辑判断 好像代码中也就这点需要改动 里面涉及到了’与‘运算和移位运算 大家可以多想想 挺有意思的。
//矩阵快速幂
public class MatricQuickPower {
public static int[][] multiply(int [][]a,int[][]b){
int[][]arr=new int[a.length][b[0].length];
for(int i=0;i<a.length;i++){
for(int j=0;j<b[0].length;j++){
for(int k=0;k<a[0].length;k++){
arr[i][j]+=a[i][k]*b[k][j];
}
}
}
return arr;
}
public static int[][] multiplyPower(int[][]a,int n){
int[][] res=new int[a.length][a[0].length];
for(int i=0;i<res.length;i++){
for(int j=0;j<res[0].length;j++){
if(i==j)
res[i][j]=1;
else
res[i][j]=0;
}
}
while(n!=0){
if((n&1)==1)
res=multiply(res,a);
n>>=1;
a=multiply(a,a);
}
return res;
}
public static void main(String[] args) {
int [][]arr={{1,1,1},{1,1,1},{1,1,1}};
int[][]arr1=multiplyPower(arr,3);
for(int i=0;i<arr1.length;i++){
for(int j=0;j<arr1[0].length;j++){
System.out.print(arr1[i][j]+" ");
}
System.out.println();
}
}
}版权声明:本文为y937498174原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。