斐波纳契数列

斐波纳契数列相关问题
=====================================================================
【通项公式】
 
=====================================================================
【迭代实现】
int Fib5(int index){
            if(index<1) {return-1;}
            int a1=1,a2=1,a3=1;
            for(int i=0;i<index-2;i++) {
                a3=a1+a2; a1=a2; a2=a3;
            }
            return a3;

}

 
=====================================================================
 
【矩阵法】
算Fibonacci数精确值的最快的方法。
F(n)和F(n - 1)写成一个2x1的矩阵
[FnFn1]=[Fn1+Fn2Fn1]=[1×Fn1+1×Fn21×Fn1+0×Fn2]=[1110]×[Fn1Fn2]
 
[FnFn1]=[1110]n1×[F1F0]=[1110]n1×[10]
 
关键点,幂运算可以【二分加速】。
设有一个方阵a,利用分治法求a的n次方,有:
an={an/2×an/2a(n1)/2×a(n1)/2×a, if x is even, if x is odd
可见复杂度满足T(n) = T(n / 2) + O(1),根据Master定理可得:T(n) = O(log n)。
 
总结:二阶方阵相乘一次可以看成是常数时间(虽然这个常数会比较大),因此整个算法的时间复杂度是O(log n),空间复杂度是O(1)。
=====================================================================

posted @ 2015-09-18 19:46  Uncle_Nucky  阅读(129)  评论(0编辑  收藏  举报