F
n
−
1
F
n
−
2
F
n
−
1
)
(\begin{matrix}F_n&F_{n-1}\F_{n-1}&F_{n-2}\end{matrix}) * (\begin{matrix}1&1\1&0\end{matrix}) = (\begin{matrix}F_n + F{n-1}&F_n\F_{n-1} + F_{n-2}&F_{n-1}\end{matrix})
(FnFn−1Fn−1Fn−2)∗(1110)=(Fn+Fn−1Fn−1+Fn−2FnFn−1)
根据斐波那契迭代的公式可以推得
- F
n
F
n
−
1
=
F
n
1
F_n + F_{n-1} = F_{n + 1}
Fn+Fn−1=Fn+1
- F
n
=
F
n
F_n = F_n
Fn=Fn
- F
n
−
1
F
n
−
2
=
F
n
F_{n-1} + F_{n - 2} = F_n
Fn−1+Fn−2=Fn
- F
n
−
1
=
F
n
−
1
F_{n-1} = F_{n-1}
Fn−1=Fn−1
由此可以得出结论。
A
n
∗
(
1
1
1
0
)
=
(
A
n
1
)
A_n * (\begin{matrix}1&1\1&0\end{matrix}) = (A_{n+1})
An∗(1110)=(An+1)
只需要记录第n-1项,第n-2项,第n项,就可以使用乘法的方法来计算出第n+1项。
根据上式得到最终递推式如下:
A
n
=
(
1
1
1
0
)
n
−
1
A_n = {(\begin{matrix}1&1\1&0\end{matrix})}^{n-1}
An=(1110)n−1
到了这一步,直接使用矩阵乘法来计算的话,最终的时间复杂度为O(n)。但是乘法的话存在快速幂运算的计算方法,使用快速幂运算,可以将运算的时间复杂度进一步降低。
快速幂运算逻辑如下:
计算a的n次方,如果a是偶数,那就直接计算
a
n
/
2
∗
a
n
/
2
a^{n/2} * a^{n/2}
an/2∗an/2,如果是奇数就计算a乘上
a
n
−
1
a^{n-1}
an−1。
代码如下:
public static int fib(int n) {
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
}
int[][] matrix = new int[][]{
{1, 1},
{1, 0}
};
matrix = powerMatrix(matrix, n - 1);
return matrix[0][0];
}
public static int[][] powerMatrix(int[][] matrix, int n) {
if (n <= 1) {
return matrix;
} else if (n % 2 == 0){
matrix = powerMatrix(matrix, n / 2);
matrix = matrixMul(matrix, matrix);
return matrix;
} else {
return matrixMul(matrix, Objects.requireNonNull(powerMatrix(matrix, n - 1)));
**先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里**
**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/40298e6279ce3ee6df6427e5cc4d663e.png)
![img](https://img-blog.csdnimg.cn/img_convert/aa3eb9686efd8ff56369c12c873e978c.png)
![img](https://img-blog.csdnimg.cn/img_convert/2d9e28e8de90d1c67dd93555cc578d07.png)
![img](https://img-blog.csdnimg.cn/img_convert/a6b6c42f5edb02a24d7e7cb3633d56ed.png)
![img](https://img-blog.csdnimg.cn/img_convert/23d248bd6d9581f0e6b20f0126c072b9.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**
是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
[外链图片转存中...(img-GQkoyFJC-1714251808153)]
[外链图片转存中...(img-Y22VytQV-1714251808154)]
[外链图片转存中...(img-SMtmpHya-1714251808154)]
[外链图片转存中...(img-f5h3UZae-1714251808155)]
[外链图片转存中...(img-HhYGNkkt-1714251808155)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**