斐波那契数列的矩阵分治求法java实现
2014-04-26 18:49
471 查看
平时一般求Fibonacci数列都是用递归求的,其实还可以利用矩阵的幂求,如果递归时间复杂度是指数的(2^n),而矩阵分治来求是logn的。
为求A的n次幂,使用了分治法,复杂度为O(log(n))。这个结论可以用数学归纳法证明。
直接上代码:
为求A的n次幂,使用了分治法,复杂度为O(log(n))。这个结论可以用数学归纳法证明。
直接上代码:
package edu.pku.ss.hlj; public class Matrix_N { static int[][] matrix; public static void main(String[] args) { init(2); matrix[0][0] = 1; matrix[0][1] = 1; matrix[1][0] = 1; matrix[1][1] = 0; int[][] temp = new int[matrix.length][matrix.length]; temp = pow(4); for (int[] a : temp) { for (int b : a) { System.out.print(b + " "); } System.out.println(); } System.out.println("斐波那契数列的fn值为:" + temp[0][1]); } public static void init(int n) { matrix = new int ; } public static int[][] matrixMulti(int[][] m, int[][] n) { int[][] temp = new int[matrix.length][matrix.length]; for (int k = 0; k < matrix.length; k++) { for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix.length; j++) { temp[k][i] += m[k][j] * n[j][i]; } } } return temp; } public static int[][] pow(int n) { int[][] temp = new int[matrix.length][matrix.length]; if (n == 1) { return matrix; } else { if (n % 2 != 0) { temp = pow((n - 1) / 2); temp = matrixMulti(temp, temp); return matrixMulti(temp, matrix); } else { temp = pow(n / 2); temp = matrixMulti(temp, temp); return temp; } } } }
相关文章推荐
- 斐波那契数列的矩阵解法(java实现)
- 斐波那契数列的Java实现
- JAVA 递归与非递归斐波那契数列的实现
- 递归算法实现斐波那契数列每项值显示(java)
- java实现计算斐波那契数列
- 斐波那契数列的递归法、迭代法、数组法Java实现
- java递归实现斐波那契数列
- Java实现斐波那契数列
- 用简单的Java代码实现斐波那契数列
- java递归实现斐波那契数列
- 斐波那契数列-递归-java实现
- 斐波那契数列递归与非递归实现(JAVA语言描述)
- java实现斐波那契数列
- 斐波那契数列 Java实现
- JAVA实现斐波那契数列
- java实现斐波那契数列的3种方法
- 斐波那契数列的3种java程序实现
- java实现斐波那契数列
- java实现斐波那契数列
- 斐波那契数列的实现(java)