• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            The Fourth Dimension Space

            枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

            O(log n)求Fibonacci數(shù)列(非矩陣法)

            《編程之美》讀書筆記:2.9 Fibonacci序列

             

            計算Fibonacci序列最直接的方法就是利用遞推公式 F(n+2)=F(n+1)+F(n)。而用通項公式來求解是錯誤的,用浮點數(shù)表示無理數(shù)本來就有誤差,經(jīng)過n次方后,當n相當大時,誤差能足夠大到影響浮點數(shù)轉(zhuǎn)為整數(shù)時的精度,得到的結(jié)果根本不準。

            用矩陣來計算,雖然時間復雜度降到O(log n),但要用到矩陣類,相當麻煩。觀察:

            F(n+2)=F(n)+F(n-1)2*F(n-1)+F(n-2)=3*F(n-2)+2*F(n-4)

            用歸納法很容易證明 F(n) = F(k)*F(n+1-k) + F(k-1)*F(n-k),利用該遞推公式和原遞推公式,要計算F(n),只要計算F([n/2])F([n/2]+1),時間復雜度為 O(lg n)。如:要計算F(58),由 58 -> 29,30 -> 14,15 -> 7,8 -> 3,4 -> 1,2 可知只要算5次。可以用一個棧保存要計算的數(shù),實際上,將n的最高位1(假設(shè)在第k位)左邊的0去除掉后,第m次要計算的數(shù)是第k位到第k-m+1位這m個位組成的值t(m),則第m-1次要計算的數(shù)為t(m-1),且

            t(m)=2*t(m-1)+(k-m+1位是否為1)。

            若第m-1次計算得到了f(k)f(k+1),則第m次計算:

             

            k-m+1

            已計算

            待計算

            1

            f(k)

            f(k+1)

            f(2*k+1),f(2*k+2)

            0

            f(2*k),f(2*k+1)

             

            具體公式見下面代碼。

            下面是計算F(n)最后四位數(shù)(某道ACM題)的代碼。


             

            /*   Fibonacci數(shù)列第N個數(shù)的最后4位數(shù)
                注意,當 N>93 時 第N個數(shù)的值超過64位無符號整數(shù)可表示的范圍。
            F(n+2)=F(n)+F(n-1) F(0)=0 F(1)=1  F(2)=1        ==>
            F(n)=F(k)*F(n+1-k) + F(k-1)*F(n-k)              ==>
            F(2*n)=F(n+1)*F(n)+F(n)*F(n-1)=(F(n+1)+F(n-1))*F(n)=(F(n+1)*2-F(n))*F(n)
            F(2*n+1)=F(n+1)*F(n+1)+F(n)*F(n)
            F(2*n+2)=F(n+2)*F(n+1)+F(n+1)*F(n)=(F(n+2)+F(n))*F(n+1)=(F(n+1)+F(n)*2)*F(n+1)
             
            */

            unsigned fib_last4( unsigned num)
            {
              
            if ( num == 0 ) return 0;
              
            const unsigned M=10000;
              unsigned ret
            =1,next=1,ret_=ret;
              unsigned flag
            =1, tt=num;
              
            while ( tt >>= 1) flag <<= 1;
              
            while ( flag >>= 1 ){
                
            if ( num & flag ){
                  ret_ 
            = ret * ret + next * next;
                  next 
            = (ret + ret + next) * next;
                } 
            else {
                  
            //多加一個M,避免 2*next-ret是負數(shù),造成結(jié)果不對
                  ret_ = (next + next + M - ret) * ret;
                  next 
            = ret * ret + next * next;
                }
                ret 
            = ret_ % M;
                next 
            = next % M;
              }
              
            return ret;
            }
            轉(zhuǎn)自:http://www.shnenglu.com/flyinghearts/archive/2010/06/23/118593.html

            posted on 2010-06-26 12:48 abilitytao 閱讀(579) 評論(0)  編輯 收藏 引用

            久久久亚洲欧洲日产国码aⅴ| 香蕉久久夜色精品国产2020| 久久久久久精品免费看SSS| 欧美粉嫩小泬久久久久久久 | 久久亚洲AV成人出白浆无码国产 | 久久婷婷午色综合夜啪| 久久免费视频1| 天堂无码久久综合东京热| 久久精品中文无码资源站| 久久99国产综合精品女同| 日韩欧美亚洲综合久久影院d3| 国产精品热久久无码av| 久久精品国产亚洲AV蜜臀色欲| 久久婷婷五月综合国产尤物app| 久久不见久久见免费视频7| 久久综合九色欧美综合狠狠| 国产精品久久久久a影院| 久久精品国产秦先生| 三级三级久久三级久久| 中文精品久久久久国产网址| 久久中文字幕人妻熟av女| 国产美女久久精品香蕉69| 九九热久久免费视频| 99久久精品免费看国产一区二区三区 | 国产成人久久精品麻豆一区| 亚洲国产成人乱码精品女人久久久不卡| 亚洲成av人片不卡无码久久| 国产欧美久久一区二区| 精品国产乱码久久久久软件| 国产日韩久久免费影院| 日韩精品无码久久久久久| 久久夜色精品国产亚洲av| 1000部精品久久久久久久久| 新狼窝色AV性久久久久久| 久久www免费人成看国产片| 国产精品久久久久AV福利动漫| 欧美久久一级内射wwwwww.| 国产成人精品久久亚洲| 嫩草伊人久久精品少妇AV| 蜜桃麻豆WWW久久囤产精品| 久久综合久久伊人|