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

雁過無痕

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::

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

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

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

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),時間復(fù)雜度為 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ù)
    注意,當(dāng) 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是負(fù)數(shù),造成結(jié)果不對
      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 閱讀(4752) 評論(11)  編輯 收藏 引用 所屬分類: 算法編程之美

評論

# re: O(log n)求Fibonacci數(shù)列(非矩陣法)[未登錄] 2010-07-16 11:18 Klion
你好,這篇文章下面這段文字“實際上,將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次計算:”
不是看的很懂,希望博主給解釋下。
主要有以下幾點疑問:1.那個最高位左邊的是比最高位高的位還是低的位。
2.那個t(m)怎么算的  回復(fù)  更多評論
  

# re: O(log n)求Fibonacci數(shù)列(非矩陣法) 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.   回復(fù)  更多評論
  

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

以58為例其二進(jìn)制表示(最左邊的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

  回復(fù)  更多評論
  

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

# re: O(log n)求Fibonacci數(shù)列(非矩陣法) 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就可以了。)
根據(jù)這兩個情況,決定使用那幾個公式。


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



  回復(fù)  更多評論
  

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

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

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

  回復(fù)  更多評論
  

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

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數(shù)列(非矩陣法) 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/
歡迎拍磚  回復(fù)  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數(shù)列(非矩陣法) 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/  回復(fù)  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            裸体丰满少妇做受久久99精品| 国产欧美日韩在线 | 欧美a级片网| 西西裸体人体做爰大胆久久久| 一区二区久久| 亚洲精品日韩在线观看| 欧美激情中文不卡| 伊人夜夜躁av伊人久久| 韩国在线一区| 狠狠色丁香婷婷综合影院| 国产精品jvid在线观看蜜臀 | 亚洲精品一区二区网址| 亚洲看片一区| 一二三区精品| 亚洲午夜精品一区二区| 在线综合欧美| 欧美日韩亚洲一区二区三区在线观看 | 国产精品你懂的在线| 欧美成人69av| 欧美激情在线| 欧美日韩视频| 国产精品影音先锋| 黑人操亚洲美女惩罚| 亚洲电影天堂av| 一区二区久久久久久| 亚洲一区二区三区乱码aⅴ| 久久不射电影网| 久久综合狠狠综合久久综合88| 理论片一区二区在线| 亚洲日本激情| 日韩亚洲欧美成人| 一区二区三区你懂的| 狠狠色综合网| 亚洲高清一区二| 亚洲资源在线观看| 欧美一区二区三区在线免费观看| 久久www免费人成看片高清| 欧美a级大片| 国产日韩欧美中文在线播放| 亚洲国产一区二区三区高清| 亚洲精品资源| 欧美岛国激情| 一本大道久久a久久精品综合| 亚洲一区二区三区四区视频| 久久精品女人天堂| 国产精品地址| 国内激情久久| 亚洲午夜久久久久久尤物| 牛人盗摄一区二区三区视频| 99国内精品久久| 亚洲深夜福利| 欧美激情一区二区久久久| 国产日韩欧美在线看| 99国内精品| 亚洲国产合集| 欧美中文字幕视频| 欧美视频在线观看免费| 亚洲人成亚洲人成在线观看图片 | 免费在线一区二区| 国产欧美亚洲精品| 亚洲欧美日韩在线一区| 欧美国产日本韩| 亚洲欧美日韩在线观看a三区 | 国产乱理伦片在线观看夜一区| 亚洲第一福利在线观看| 欧美韩日一区| 亚洲精品视频免费在线观看| 久久精品女人| 亚洲一区在线观看视频| 欧美午夜精品一区二区三区| 亚洲级视频在线观看免费1级| 午夜亚洲福利| 欧美一区二区在线| 欧美91视频| 一本色道久久综合亚洲精品按摩 | 欧美在线影院| 亚洲午夜一区二区三区| 免费高清在线视频一区·| 国产欧美精品在线播放| 亚洲视频在线一区| 亚洲国产婷婷| 久久全球大尺度高清视频| 欧美日韩在线直播| 一区二区三区不卡视频在线观看| 欧美 日韩 国产精品免费观看| 亚洲美女91| 蜜臀av性久久久久蜜臀aⅴ| 激情久久影院| 欧美国产欧美亚洲国产日韩mv天天看完整| 香蕉久久一区二区不卡无毒影院| 欧美天天视频| 午夜一级久久| 久久精视频免费在线久久完整在线看 | 女同性一区二区三区人了人一 | 久久综合色8888| 亚洲视频欧美在线| 国产日韩在线播放| 久久亚洲捆绑美女| 久热爱精品视频线路一| 亚洲日本乱码在线观看| 亚洲国产高清aⅴ视频| 欧美精品一区二区久久婷婷| 久久免费视频在线| 亚洲精品一区久久久久久| 亚洲欧洲精品一区二区三区| 欧美日韩一区二区三区在线观看免| 亚洲欧美一区二区原创| 欧美一区二区大片| 欲色影视综合吧| 亚洲高清在线播放| 欧美jizzhd精品欧美巨大免费| 亚洲精品在线观看免费| 欧美综合国产| 亚洲精品老司机| 亚洲愉拍自拍另类高清精品| 1769国内精品视频在线播放| 国产欧美69| 欧美高清在线观看| 国产精品a久久久久| 久久精品亚洲| 久久国产直播| 亚洲欧美激情精品一区二区| 久久精品噜噜噜成人av农村| 日韩一区二区精品| 久久久国产精品一区| 中日韩男男gay无套| 久久久国产91| 久久久久国产精品www| 欧美紧缚bdsm在线视频| 午夜精品久久久久久久久 | 日韩视频一区| 亚洲一区在线观看视频 | 亚洲国产高清自拍| 亚洲无线一线二线三线区别av| 一区二区在线观看视频| 一区二区三区欧美激情| 欧美国产日韩免费| 美日韩在线观看| 国产精品网曝门| 亚洲综合精品四区| 亚洲免费婷婷| 欧美日本高清视频| 亚洲激情一区二区| 亚洲国产精品v| 欧美在线在线| 亚洲精品一区二区三区福利| 欧美成人精品一区二区三区| 老司机成人网| 国内精品久久久久伊人av| 亚洲欧美日本国产有色| 99综合精品| 免费永久网站黄欧美| 亚洲狠狠丁香婷婷综合久久久| 伊人精品视频| 亚洲一区二区在线免费观看| 在线视频精品| 欧美日韩亚洲激情| 亚洲一区网站| 久久成年人视频| 午夜精品亚洲一区二区三区嫩草| 亚洲欧美精品一区| 久久丁香综合五月国产三级网站| 嫩草国产精品入口| 欧美国产免费| 亚洲最新在线| 国产精品国产一区二区| 99精品福利视频| 久久精精品视频| 国产一区二区黄| 久久精视频免费在线久久完整在线看 | 亚洲美女视频| 国产精品久久久久av免费| 亚洲视频精选| 久久精品国产亚洲一区二区| 国产一区二区丝袜高跟鞋图片| 老司机亚洲精品| 亚洲电影观看| 一区二区三区欧美在线观看| 欧美偷拍一区二区| 久久久综合网| 亚洲国产视频直播| 亚洲在线网站| 国产视频一区二区三区在线观看| 久久伊人一区二区| 亚洲三级视频在线观看| 亚洲免费影视| 黄网动漫久久久| 国产精品久久久久久久午夜| 欧美一区二区三区日韩| 欧美电影免费观看| 一区二区三区精品视频| 在线免费不卡视频| 一区二区久久久久| 久久在线免费| 久久久精品国产免费观看同学| 亚洲另类黄色| 国产美女高潮久久白浆| 久久久久久综合| 欧美高清在线视频| 久久色在线播放|