https://leetcode-cn.com/problems/fibonacci-number/solution/fei-bo-na-qi-shu-by-leetcode/
如图 这是斐波那契数列的转移矩阵
所以
而转移矩阵的n-2次幂可以通过快速幂计算
class Solution {public int fib(int N) {if (N == 0) return 0;if (N <= 2) return 1;int[][] dp = {{1, 1},{0,0}}; // dp[0][1], dp[0][2]int[][] ma = {{1,1},{1,0}};N -= 2; //n-2ma=quickMul(ma,N);dp=mul(dp,ma);return dp[0][0]; // dp[n]}int[][] quickMul(int[][] ma, long N) {int[][] ans = {{1,0},{0,1}};// 贡献的初始值为单位矩阵int[][] x_contribute = ma;// 在对 N 进行二进制拆分的同时计算答案while (N > 0) {if (N % 2 == 1) {// 如果 N 二进制表示的最低位为 1,那么需要计入贡献ans = mul(ans,ma);}// 将贡献不断地平方x_contribute = mul(x_contribute,x_contribute);// 舍弃 N 二进制表示的最低位,这样我们每次只要判断最低位即可N /= 2;}return ans;}int[][] mul(int[][] A, int[][] B) {int x = A[0][0] * B[0][0] + A[0][1] * B[1][0];int y = A[0][0] * B[0][1] + A[0][1] * B[1][1];int z = A[1][0] * B[0][0] + A[1][1] * B[1][0];int w = A[1][0] * B[0][1] + A[1][1] * B[1][1];A[0][0] = x;A[0][1] = y;A[1][0] = z;A[1][1] = w;return A;}}
总结
对于任意的齐次线性方程组 .
可以化为矩阵
也就可以用矩阵快速幂进行优化
