您的位置:首页 > 其它

矩阵快速幂求斐波那契数列(初学整理)

2017-10-22 14:43 483 查看
对于矩阵乘法与递推式之间的关系:

如:在斐波那契数列之中

f[i] = 1*f[i-1]+1*f[i-2]  f[i-1] = 1*f[i-1] + 0*f[i-2];




所以



就这两幅图完美诠释了斐波那契数列如何用矩阵来实现。

优化的算法,将2*2矩阵的幂改为n,去掉后边的乘,直接输出矩阵中的a[0][1]位置的数就是下标与幂相等的斐波那契项数。

int pow(int n)//还是小范围数据来说吧,要不然返回值的类型自己定义
{
mat c,res;
memset(res.a,0,sizeof(res.a));
c.a[0][0]=1;//给矩阵赋初值
c.a[0][1]=1;
c.a[1][0]=1;
c.a[1][1]=0;
for(int i=0;i<n;i++) res.a[i][i]=1;//单位矩阵;
while(n)
{
if(n&1) res=mat_mul(res,c);//这里看就要用到上面的矩阵相乘了;
c=mat_mul(c,c);
n=n>>1;
}
return res.a[0][1];
}//时间复杂度log(n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: