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

雁過無痕

  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 閱讀(4765) 評論(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>
            一本综合久久| 亚洲精品小视频| 亚洲美女电影在线| 亚洲国产老妈| 一区二区三区精品视频| 亚洲视频在线观看| 亚洲欧美在线aaa| 久久久久成人精品免费播放动漫| 久久久无码精品亚洲日韩按摩| 欧美阿v一级看视频| 亚洲精品国产视频| 99国产精品视频免费观看一公开| 亚洲一级黄色片| 久久久久综合| 欧美体内谢she精2性欧美| 国产乱肥老妇国产一区二| 国产自产精品| 宅男噜噜噜66一区二区66| 欧美影视一区| 亚洲激情图片小说视频| 午夜精品美女自拍福到在线| 久久中文字幕一区| 国产精品久久999| 亚洲精品一区二区三区不| 久久av一区二区| 亚洲国产日韩在线| 久久精品国产第一区二区三区最新章节 | 国产精品久久久久一区二区三区共 | 欧美高清日韩| 亚洲一级黄色| 欧美国产日韩一区二区在线观看| 国产精品qvod| 亚洲精品精选| 免费日本视频一区| 欧美一区在线看| 国产精品永久| 亚洲一区不卡| 亚洲另类黄色| 欧美国产精品人人做人人爱| 国内精品久久久久伊人av| 亚洲欧美视频在线| 在线视频欧美日韩| 久久精品女人天堂| 一区二区日韩| 欧美高清视频一二三区| 好看不卡的中文字幕| 亚洲欧美综合网| 在线一区视频| 国产精品久久国产精品99gif| 亚洲人在线视频| 欧美高清日韩| 欧美a级片网站| 亚洲成人资源网| 另类亚洲自拍| 久久天天狠狠| 亚洲国产精品va在线看黑人动漫| 久久一日本道色综合久久| 欧美一区二区免费观在线| 国产精品一区=区| 欧美一区二区日韩一区二区| 一区二区久久久久久| 欧美视频一区在线观看| 国产精品99久久久久久宅男| 亚洲卡通欧美制服中文| 欧美天天在线| 欧美专区亚洲专区| 久久久久久久久久久成人| 国语自产精品视频在线看8查询8| 久久久另类综合| 久久一区二区三区四区五区| 亚洲韩国日本中文字幕| 亚洲三级视频在线观看| 国产精品成人播放| 久久久久综合一区二区三区| 六月婷婷一区| 亚洲一区视频在线观看视频| 亚洲综合国产| 亚洲高清三级视频| 日韩天天综合| 精品69视频一区二区三区| 亚洲国产一成人久久精品| 欧美日韩在线精品| 久久久精彩视频| 欧美激情精品久久久六区热门 | 日韩视频一区二区三区在线播放免费观看| 欧美精品三级在线观看| 欧美中文在线观看国产| 免费国产一区二区| 亚洲欧美精品一区| 久久亚洲不卡| 亚洲欧美日韩国产一区| 久久综合色影院| 亚洲欧美韩国| 嫩草影视亚洲| 久久久av水蜜桃| 欧美日韩亚洲91| 久久综合影音| 国产精品va在线| 亚洲福利一区| 激情小说亚洲一区| 一本色道久久综合精品竹菊| 激情久久五月天| 欧美在线播放一区| 欧美激情偷拍| 蜜臀a∨国产成人精品| 欧美性感一类影片在线播放| 免费在线看成人av| 国产乱码精品1区2区3区| 亚洲国产成人精品女人久久久 | 一区二区久久久久| 亚洲国产日韩精品| 久久丁香综合五月国产三级网站| 一本色道久久综合亚洲精品小说| 久久久久亚洲综合| 久久国产精品久久精品国产| 欧美精品入口| 亚洲韩国日本中文字幕| 国产一区二区你懂的| 在线一区二区三区做爰视频网站| 亚洲精品国精品久久99热一| 久久精品国产久精国产一老狼| 亚洲欧美日韩精品久久亚洲区 | 中文国产成人精品| 正在播放日韩| 欧美激情二区三区| 91久久精品国产91性色tv| 亚洲高清资源| 老司机精品视频一区二区三区| 久久久不卡网国产精品一区| 国产午夜精品在线| 新67194成人永久网站| 午夜一区二区三区在线观看| 国产精品高潮呻吟久久av无限 | 亚洲国产精品一区| 91久久午夜| 欧美精品在线看| 亚洲乱码国产乱码精品精98午夜| 日韩午夜黄色| 欧美日韩精品三区| 99精品国产在热久久婷婷| 亚洲一区影院| 国产亚洲欧美另类中文 | 这里只有精品在线播放| 亚洲一区二区欧美| 国产精品私人影院| 午夜在线视频观看日韩17c| 久久精品国产欧美亚洲人人爽| 国产美女一区二区| 久久久www成人免费精品| 欧美激情一区| 亚洲五月婷婷| 国产偷自视频区视频一区二区| 久久www成人_看片免费不卡| 久久一二三四| 99精品国产在热久久| 国产精品视频免费一区| 久久午夜电影网| 日韩午夜中文字幕| 久久国产视频网站| 在线欧美日韩精品| 欧美性大战xxxxx久久久| 狂野欧美激情性xxxx欧美| 亚洲国产精品久久久久秋霞影院| 久久综合给合久久狠狠色 | 欧美一级日韩一级| 精品91在线| 欧美美女操人视频| 性欧美长视频| 亚洲激情在线观看| 久久国产精品毛片| 日韩视频中文字幕| 国产欧美精品va在线观看| 美乳少妇欧美精品| 亚洲综合电影| 亚洲三级观看| 蜜臀av性久久久久蜜臀aⅴ| 亚洲深夜福利| 最新国产乱人伦偷精品免费网站| 国产精品国产a级| 免费91麻豆精品国产自产在线观看| 一区二区三区国产在线| 女仆av观看一区| 小辣椒精品导航| 在线视频欧美精品| 亚洲国产高清在线观看视频| 国产精品久久久久av免费| 老司机精品福利视频| 亚洲欧美日韩综合aⅴ视频| 亚洲日本成人| 欧美大片免费观看| 久久久久久国产精品一区| 亚洲一级在线| 亚洲精品黄网在线观看| 永久免费精品影视网站| 国产欧美婷婷中文| 国产啪精品视频| 国产欧美日韩精品丝袜高跟鞋| 欧美日韩一区二区三区| 欧美二区在线| 欧美成人午夜77777|