想必大家对魔鬼序列:斐波那契数列都不陌生吧
F(n+2)=F(n+1)+F(n)
用编程实现的时候,有四种常见的方法:(当然一个比一个更为优化)
1.天真算法,求哪个就循环去求哪个呗,这样F(0),F(1)...前面的这些会重复好多遍计算,当然慢了。
2.由底至上的方法,用数组保存起来,按照顺序一个个往上计算,这样就可以避免重复了。
3.利用通式,跟由底至上的时间效率差不多。
4.矩阵乘方。
由通式可得,斐波那契数列是个二阶递推数列,
因此,存一个二维矩阵A,使得
(Fn+2,Fn+1)=(Fn+1,Fn)*A;
有规律可得,A=(1 1
1 0),呵呵这是个二维矩阵。
(Fn+2,Fn+1)=(Fn+1,Fn)*A=(Fn,Fn-1)*A^2...=(F1,F0)*A^(n+1)
即:(Fn+1 Fn =( 1 1 ^n;这个写的有些抽象了
Fn Fn-1) 1 0)
在实际中,再采用快速幂的方法求,这样一来时间效率就优化为O(㏒n);
具体快速幂,请看下面的链接:
http://blog.youkuaiyun.com/masked__dance/article/details/40264411