青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

雁過無痕

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::

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

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

用矩陣來計算,雖然時間復雜度降到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次。可以用一個棧保存要計算的數,實際上,將n的最高位1(假設在第k位)左邊的0去除掉后,第m次要計算的數是第k位到第k-m+1位這m個位組成的值t(m),則第m-1次要計算的數為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)最后四位數(某道ACM題)的代碼。


 

/*   Fibonacci數列第N個數的最后4位數
    注意,當 N>93 時 第N個數的值超過64位無符號整數可表示的范圍。
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是負數,造成結果不對
      ret_ = (next + next + M - ret) * ret;
      next 
= ret * ret + next * next;
    }
    ret 
= ret_ % M;
    next 
= next % M;
  }
  
return ret;
}


 



posted on 2010-06-23 23:28 flyinghearts 閱讀(4755) 評論(11)  編輯 收藏 引用 所屬分類: 算法編程之美

評論

# re: O(log n)求Fibonacci數列(非矩陣法)[未登錄] 2010-07-16 11:18 Klion
你好,這篇文章下面這段文字“實際上,將n的最高位1(假設在第k位)左邊的0去除掉后,第m次要計算的數是第k位到第k-m+1位這m個位組成的值t(m),則第m-1次要計算的數為t(m-1),且t(m)=2*t(m-1)+(第k-m+1位是否為1)。若第m-1次計算得到了f(k)和f(k+1),則第m次計算:”
不是看的很懂,希望博主給解釋下。
主要有以下幾點疑問:1.那個最高位左邊的是比最高位高的位還是低的位。
2.那個t(m)怎么算的  回復  更多評論
  

# re: O(log n)求Fibonacci數列(非矩陣法) 2010-07-18 05:16 dissertation service
A lot of years good people would like to order good enough history dissertation referring to this good post from the dissertation writing services. Can you in case suggest the experienced thesis writing services? Thanks a lot.   回復  更多評論
  

# re: O(log n)求Fibonacci數列(非矩陣法) 2010-07-21 00:35 flyinghearts
@Klion

以58為例其二進制表示(最左邊的0省略)為:
  11 1010
t(1) 1
t(2) 11
t(3) 11 1
t(4) 11 10
t(5) 11 101
t(6) 11 1010

即:
t(1) = 1
t(2) = 3
t(3) = 7
t(4) = 14
t(5) = 29
t(6) = 58

  回復  更多評論
  

# re: O(log n)求Fibonacci數列(非矩陣法)[未登錄] 2010-07-26 11:40 Klion
@flyinghearts
恩,謝謝了。后來我自己也動手劃了下,原來我一開始沒理解到,現在我知道那個t(m)怎么算的,也用自己的理解寫了點求出這個是干嘛的。
我理解的就是這個t(m)其實就是一個逆向工程,先是判斷右移(m-1)位之后的情況,看這個數是奇數還是偶數,如果是奇數就由哪兩個數得來,如果是偶數,就由哪兩個數得來,由這個可以得到我們要算的結果是算出來的這兩個中的小者。  回復  更多評論
  

# re: O(log n)求Fibonacci數列(非矩陣法) 2010-08-02 23:34 flyinghearts
@Klion
58 -> 29 -> 14 -> 7 -> 3 -> 1
t(i)就是這個倒過來。
要計算 F(t(i)) 就要判斷 t(i) 是 t(i-1)的2倍,還是2倍加1
(實際上,t(i)沒必要計算,只要判斷第k-m+1位是否為1就可以了。)
根據這兩個情況,決定使用那幾個公式。


我最初的代碼,就是用一個棧,保存n每次右移1位的結果,
最后根據棧頂是否是奇數,來決定調用那兩個公式,出棧。
反復至棧為空。



  回復  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數列(非矩陣法)[未登錄] 2010-10-06 05:47 april
謝謝帖主的分享,不過code算出來的結果是錯的,貼主有測試過嗎?
遞推公式 F(n+2)=F(n)+F(n-1) 是錯的
正確的是 F(n+1)=F(n)+F(n-1), 我想這是為什么算出來的結果不是F(n), 而是F(n-1).
  回復  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數列(非矩陣法)[未登錄] 2010-10-06 06:01 april
@april
收回我的評論,雖然遞推公式寫錯(typo),但是code返回結果正確。。  回復  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數列(非矩陣法) 2010-12-02 23:34 flyinghearts
@april
確實把公式打錯了:
F(n+2)=F(n)+F(n-1) 應該是 F(n+1) = F(n) + F(n-1)
不過后面的公式推導沒問題。

  回復  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數列(非矩陣法) 2012-09-03 10:26
不過實測的結果:是matrix版(O(logn))最快,去遞歸的(bottom-up)版(O(n))次之,然后是這個版本(O(logn)),可能是乘法的緣故  回復  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數列(非矩陣法) 2013-04-26 23:21 card323
我寫了一篇文章 ggboom.com/2013/04/26/ologn%E6%B1%82%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91fibonacci%E6%95%B0%E5%88%97/
歡迎拍磚  回復  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數列(非矩陣法) 2013-04-26 23:23 card323
@黃
試試我的算法:
ggboom.com/2013/04/26/ologn%E6%B1%82%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91fibonacci%E6%95%B0%E5%88%97/  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美吻胸吃奶大尺度电影| 久久综合狠狠综合久久综青草 | 亚洲精品一区二区三区四区高清| 日韩一区二区高清| 亚洲国产网站| 国产精品成人在线观看| 亚洲欧美精品在线观看| 麻豆av一区二区三区久久| 狠狠色综合一区二区| 欧美精品在线看| 香蕉av福利精品导航| 亚洲国产精品国自产拍av秋霞| 亚洲欧美国产一区二区三区| 亚洲福利视频免费观看| 你懂的视频欧美| 性欧美超级视频| 亚洲免费成人av| 欧美不卡视频一区| 欧美一区二区三区四区高清| 99精品热视频| 亚洲日本欧美天堂| 亚洲第一毛片| 伊人久久婷婷色综合98网| 国产精品久在线观看| 欧美午夜视频在线观看| 欧美一区二区三区久久精品| 亚洲图色在线| 一区二区欧美精品| 一本大道久久a久久综合婷婷 | av成人激情| 亚洲剧情一区二区| 日韩视频免费在线| 夜夜嗨av一区二区三区四季av | 亚洲欧美日韩精品久久久| 国产区日韩欧美| 国产一区二区精品在线观看| 国内揄拍国内精品久久| 一区二区三区在线免费播放| 亚洲大片免费看| 亚洲欧美制服另类日韩| 日韩视频在线观看免费| 一本久道久久久| 欧美一区二区在线观看| 米奇777超碰欧美日韩亚洲| 欧美成人亚洲| 国产精品豆花视频| 国内精品嫩模av私拍在线观看| 黄色成人在线观看| 99在线热播精品免费99热| 午夜视频久久久久久| 蜜臀av在线播放一区二区三区| 亚洲夫妻自拍| 亚洲欧美日韩国产精品| 欧美黑人国产人伦爽爽爽| 欧美视频在线观看一区二区| 一区二区三区在线视频观看| 亚洲一区二区成人在线观看| 欧美成人激情在线| 一本久久综合| 久久久国产一区二区三区| 久久尤物电影视频在线观看| 一本到高清视频免费精品| 欧美成人三级在线| 国内精品久久久久影院色| 午夜精品区一区二区三| 日韩视频一区二区三区在线播放| 久久漫画官网| 国内揄拍国内精品久久| 亚洲视频久久| 亚洲自拍三区| 亚洲毛片在线看| 欧美黄色精品| 亚洲成人资源| 欧美激情一区二区三区在线视频观看 | 亚洲欧美日韩精品在线| 另类天堂av| 麻豆精品在线视频| 国产亚洲一区二区三区在线播放| 国产精品成人aaaaa网站| 国产精品综合网站| 美女脱光内衣内裤视频久久影院| 国产又爽又黄的激情精品视频| 国产一区二区在线观看免费| 日韩视频在线一区二区三区| 欧美成人黄色小视频| 久久激情综合网| 国产精品国产a| 亚洲视频第一页| 制服丝袜亚洲播放| 欧美偷拍一区二区| 亚洲无线视频| 欧美激情bt| 欧美日韩国产91| 亚洲一区在线免费| 亚洲免费在线看| 欧美顶级大胆免费视频| 亚洲一区二区三区成人在线视频精品| 亚洲免费不卡| 国内精品久久久| 亚洲高清激情| 一区福利视频| 亚洲美女色禁图| 国产午夜精品一区二区三区视频| 99在线|亚洲一区二区| 久久午夜激情| 欧美精品在线一区二区三区| 美女国产精品| 国产精品成人国产乱一区 | 久久精品毛片| 欧美日韩高清免费| 久久成年人视频| 欧美黑人在线播放| 久久久久一区二区三区| 国产精品白丝jk黑袜喷水| 久久久最新网址| 欧美三级中文字幕在线观看| 免费看成人av| 在线成人av.com| 亚洲欧洲av一区二区三区久久| 1024精品一区二区三区| 亚洲尤物视频网| 久久都是精品| 国产精品视频在线观看| 亚洲国产裸拍裸体视频在线观看乱了 | 99精品国产福利在线观看免费| 国产精品一区二区三区久久久 | 欧美在线黄色| 亚洲精品一级| 久久中文在线| 久久久久免费观看| 国产情人节一区| 久久人人爽人人爽| 免费的成人av| 亚洲精品国产拍免费91在线| 香蕉久久a毛片| 久久午夜国产精品| 国产日韩欧美在线| 午夜视频一区在线观看| 亚洲午夜一区二区| 国产综合久久| 欧美日本高清视频| 亚洲天堂av在线免费观看| 99这里只有精品| 午夜精品视频在线观看| 韩国欧美一区| 欧美日本不卡高清| 久久亚洲综合色一区二区三区| 欧美激情1区2区| 久久99在线观看| 亚洲欧美另类综合偷拍| 国产亚洲va综合人人澡精品| 老鸭窝亚洲一区二区三区| 亚洲免费高清视频| 最新亚洲激情| 久久综合色88| 亚洲第一精品夜夜躁人人躁| 欧美日韩另类字幕中文| 香蕉久久一区二区不卡无毒影院| 一区二区三区久久网| 美女亚洲精品| 久久久久久尹人网香蕉| 国产日韩在线一区二区三区| 国产精品日产欧美久久久久| 久久嫩草精品久久久久| 亚洲性xxxx| 亚洲午夜视频在线观看| 亚洲国产精品va| 久久综合九色欧美综合狠狠| 亚洲免费黄色| 亚洲免费福利视频| 久久激五月天综合精品| 亚洲欧美日本国产有色| 欧美影院成人| 欧美在线视频网站| 午夜精品久久久久久久99樱桃| 久久精品视频免费| 久久激情五月丁香伊人| 久久国产精品久久精品国产| 欧美一二三视频| 欧美成人精品三级在线观看| 亚洲国产欧美久久| 亚洲国产美女| 亚洲一区黄色| 先锋亚洲精品| 久久精品国产亚洲精品 | 另类春色校园亚洲| 久久er99精品| 亚洲一区二区不卡免费| 欧美成黄导航| 一本色道久久综合一区| 欧美一级片久久久久久久| 欧美一区二区三区婷婷月色 | 久久国产日本精品| 欧美成人黄色小视频| 亚洲精品你懂的| 亚洲午夜久久久久久尤物 | 免费看av成人| 欧美日韩一区不卡| 欧美日韩日日夜夜| 一区二区三区在线免费播放|