参考文献:《算法导论》、dalao的blog
我真的觉得本篇良心,大大干货
引言:
题目:
斐波那契数列很喜欢被研究,其前几项为:1 1 2 3 5 8 13 ……
则,求斐波那契数列的第n项是?
解法:
1.朴素求解:
由斐波那契数列的定义,可以由递推求解
f(1)=1,f(2)=1
f(n)=f(n-1)+f(n-2) (n>=3)
f[1]=f[2]=1;
for(int i=1;i<=n;i++)
f[n]=f[n-1]+f[n-2];
out(f[n]);
2.矩阵快速幂优化递推式:
学习这个首先要了解一下几个东西:
1.矩阵
2.矩阵的运算
3.快速幂
4.矩阵快速幂优化
矩阵乘法快速幂
1.矩阵
矩阵是二维的一个由n*m构成的”数列“(我想不到其他解释的名词了)
大概长这样:
其数学上的定义方式为:
矩阵名=一对括号里面为矩阵的内容
矩阵的向量简单来说就是矩阵的一行或者是一列
我们把矩阵的行和列交换记作(以矩阵A举例)
零矩阵为所有元素都是0的矩阵
单位向量是第i个元素是1而其他皆为0 的向量
那么,矩阵有以下特殊的几种
1.1对角矩阵
当i!=j时,有aij=0
大概长这样:(盗用一下G_congratulationdalao单位矩阵的图2333,这里的1可以换成其他任意数,但下面的单位矩阵就不可以了)