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

雁過無痕

  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 閱讀(4752) 評論(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>
            欧美在线电影| 欧美日韩国产美女| 亚洲精品视频一区二区三区| 免费不卡在线视频| 农夫在线精品视频免费观看| 欧美大片免费观看| 亚洲国产二区| 亚洲高清一区二| 亚洲第一伊人| 亚洲午夜国产一区99re久久| 亚洲视屏在线播放| 久久er99精品| 久久综合九九| 欧美日韩国产欧| 国产人妖伪娘一区91| 国产在线麻豆精品观看| 在线看片成人| 在线一区视频| 另类成人小视频在线| 亚洲成色777777在线观看影院| 亚洲国产欧洲综合997久久| 夜夜嗨一区二区三区| 亚洲欧美日韩综合aⅴ视频| 久久久久国产一区二区| 欧美精品一区二区在线播放| 国产精品h在线观看| 在线免费观看视频一区| 亚洲一区在线免费观看| 美女精品在线| 亚洲免费视频在线观看| 免费在线观看精品| 国产精品自拍小视频| 亚洲卡通欧美制服中文| 久久视频国产精品免费视频在线| 91久久精品美女| 欧美在线欧美在线| 欧美日韩无遮挡| 在线观看的日韩av| 亚洲综合日韩中文字幕v在线| 一本色道久久综合狠狠躁的推荐| 亚洲美女区一区| 欧美制服丝袜| 国产精品久久久久高潮| 亚洲激情在线播放| 久久亚洲春色中文字幕| 99精品欧美一区二区蜜桃免费| 久久大综合网| 国产亚洲精品bt天堂精选| 一本久道久久综合婷婷鲸鱼| 欧美va天堂在线| 久久国产精品一区二区三区| 国产精品美女久久久久av超清 | 欧美午夜视频在线| 亚洲精品久久久久久下一站 | 亚洲综合色视频| 亚洲老司机av| 欧美日本韩国| 亚洲图片在线| 亚洲视频狠狠| 欧美少妇一区| 亚洲欧美日本国产专区一区| 99精品久久| 国产精品日韩欧美一区| 欧美亚洲三区| 亚洲女女女同性video| 国产噜噜噜噜噜久久久久久久久| 亚洲一区国产精品| 亚洲欧美视频| 精品1区2区| 欧美激情在线观看| 欧美日韩精品一本二本三本| 一区二区日韩免费看| 亚洲视频中文字幕| 国产日韩一区二区三区| 久久亚洲综合| 蜜臀av在线播放一区二区三区| 亚洲日韩成人| 亚洲视频大全| 激情久久一区| 亚洲国产日韩美| 欧美视频二区| 久久久久久91香蕉国产| 久久一区二区精品| 中文精品在线| 欧美一级大片在线观看| 亚洲成色最大综合在线| 亚洲人成精品久久久久| 国产精品捆绑调教| 久久综合狠狠综合久久综合88 | 亚洲一区二区黄| 激情91久久| 99国产精品视频免费观看一公开| 国产精品一级久久久| 久久免费高清| 欧美日本一道本在线视频| 亚洲影视在线| 久久久久久夜| 亚洲天堂成人在线观看| 午夜欧美大片免费观看| ●精品国产综合乱码久久久久| 亚洲全黄一级网站| 国产主播精品| 在线一区二区三区做爰视频网站 | 国产精品乱码久久久久久| 可以免费看不卡的av网站| 欧美极品影院| 久久久久国产一区二区三区四区 | 亚洲福利精品| 亚洲中午字幕| 在线亚洲伦理| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲自拍偷拍网址| 欧美成人69av| 久久综合激情| 国产一区二区三区在线免费观看| 最近看过的日韩成人| 国产亚洲毛片在线| 亚洲一区二区欧美日韩| 99国产精品久久久久久久久久 | 国产精品任我爽爆在线播放 | 精品999成人| 亚洲欧美日韩国产一区| 亚洲最新色图| 欧美成人国产一区二区| 久久综合久色欧美综合狠狠| 国产精品欧美久久| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美日韩精品高清| 欧美激情aⅴ一区二区三区| 国产日韩精品一区二区三区在线| 亚洲精品国产精品国产自| 激情偷拍久久| 欧美在线不卡视频| 久久久亚洲欧洲日产国码αv| 国产精品日韩精品欧美在线 | 免费人成精品欧美精品| 国产一区二区三区精品久久久| 亚洲在线免费| 欧美一区观看| 国产日韩欧美一区二区三区在线观看| aaa亚洲精品一二三区| 亚洲视频电影在线| 欧美午夜免费| 午夜欧美不卡精品aaaaa| 久久久999成人| 久久精品国产亚洲高清剧情介绍| 亚洲精品一区二区三区蜜桃久| 欧美一区二区在线免费观看| 西西裸体人体做爰大胆久久久| 国产精品女人久久久久久| 性欧美超级视频| 免费在线一区二区| 亚洲精选一区| 欧美午夜片在线观看| 亚洲欧美日韩综合国产aⅴ| 久久精品99久久香蕉国产色戒| 国产亚洲一区二区精品| 久久狠狠婷婷| 亚洲国产精品久久精品怡红院| 一区二区欧美激情| 国产午夜精品理论片a级探花| 久久久噜噜噜久久中文字免| 欧美激情精品久久久久久大尺度| 亚洲老司机av| 国产日韩精品一区| 免费在线播放第一区高清av| 日韩视频免费观看| 欧美中文字幕在线观看| 永久91嫩草亚洲精品人人| 欧美日韩大陆在线| 欧美一区二区三区电影在线观看| 免费日韩av| 午夜精品偷拍| 亚洲人成久久| 国产亚洲综合精品| 欧美日韩国产首页在线观看| 午夜精品短视频| 亚洲国产网站| 久久久久久久综合日本| 亚洲精品美女91| 国产一区二区三区免费不卡| 欧美国产日韩精品免费观看| 亚洲综合精品| 亚洲激情亚洲| 麻豆久久精品| 欧美一区免费视频| 一区二区三区精品国产| 激情综合在线| 国产精品―色哟哟| 欧美日韩国产黄| 久久三级视频| 午夜精品视频一区| 一本一本久久| 亚洲日本久久| 欧美国产视频在线| 久久亚洲欧美| 久久本道综合色狠狠五月| 亚洲深夜福利| 艳妇臀荡乳欲伦亚洲一区| 在线精品国产成人综合|