矩阵快速幂--斐波那契数列
来源:互联网 发布:2017淘宝开店营业执照 编辑:程序博客网 时间:2024/04/30 10:17
求斐波那契数列有很多种方法,暴力,递归,矩阵快速幂等等
但是前两者在所求项过大时会导致运行时间内存过大,矩阵快速幂恰恰解决了这两个弊端
矩阵快速幂包含快速幂思想和些许线性代数知识来达到快速运算的目的
首先我们来了解一下相关线性代数知识:
矩阵A*矩阵B=矩阵C
由图中所表示的可以理解为 f(x+1)=f(x)+f(x-1)即斐波那契数列的通式
若要求项数较大的数n斐波那契数,那么只用将矩阵A进行n-1次幂运算
算法实现包括包括: 构建表示矩阵的结构体,矩阵乘法的实现,矩阵快速幂
- 构建表示矩阵的结构体
struct matrix{ long long mat[10][10]; matrix() { memset(mat, 0 ,sizeof(mat)); }}
由于斐波那契数列中的数值会超出int的范围,所以此处用了 long long ,构造函数是将数据初始化为0
- 矩阵乘法的实现
matrix mul(matrix A,matrix B){ matrix C; for(int i=1;i<10;i++) for(int j=1;j<10;j++) for(int k=1;k<10;k++) { C.mat[i][j]=A.mat[i][K]*B.mat[k][j]+C.mat[i][j] } return C; }
矩阵乘法很好实现,用三层循环就可以实现
- 矩阵快速幂
matrix quickmi(matrix A,long long n){ matrix B; for(int i=1;i<10;i++) B.mat[i][i]=1; while (n>0) { if(n&1) B=mul(A,B); A=mul(A,A); n>>=1; } return B;}
矩阵快速幂和普通快速幂是一样的思想,只是将基数由实数变成矩阵进行快速运算
如果不是很了解快速幂,可以看看这个博客快速幂
注: 片段代码或者语言如有错误望谅解并请指出。
阅读全文
0 0
- hdu3117(斐波那契数列+矩阵快速幂)
- 矩阵快速幂 斐波那契数列
- EOJ 1499 【斐波那契数列】【矩阵快速幂】
- hdu4549 M斐波那契数列(矩阵快速幂)
- hihoCoder1143 DP 斐波那契数列矩阵快速幂
- nod51-1242斐波那契数列-矩阵快速幂
- 斐波那契数列矩阵快速幂
- 斐波那契数列 打表+矩阵快速幂
- 【矩阵快速幂】 斐波那契数列求解。
- 斐波那契数列(矩阵快速幂)
- *矩阵快速幂(斐波那契数列模板)
- 矩阵快速幂(斐波那契数列)
- HDU4549 M斐波那契数列【矩阵快速幂】
- 斐波那契数列 (矩阵快速幂)
- 斐波那契数列 (矩阵快速幂)
- 矩阵快速幂--斐波那契数列
- 矩阵快速幂法+斐波那契数列余数
- 矩阵快速幂,求斐波那契数列
- HttpUrlConnection+Handler 和 HttpClient+AsyncTask 实现页面的基本操作
- Windows下使用cmd运行jar文件
- 10、进程关系
- 简单的通过宏定义实现自定义打印函数
- sqlserver游标选项说明
- 矩阵快速幂--斐波那契数列
- 关于json数据传输乱码问题
- 使用threejs+tweenjs实现图片炸裂效果
- HDFS执行负载均衡时的threads quota is exceeded;浅谈HDFS的balancer(附代码)
- Android中常用的设计模式简单总结
- markdown简明语法
- 【SSM】Spring+SpringMVC+mybatis入门(环境搭建)
- Python学习之Tkinter
- 《机器学习实战》学习笔记1