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

雁過無痕

  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>
            亚洲精品免费在线观看| 欧美jizz19性欧美| 亚洲视频图片小说| 国产精品高潮久久| 午夜亚洲伦理| 欧美制服丝袜第一页| 黄网站免费久久| 欧美激情视频一区二区三区在线播放 | 亚洲人成网站在线观看播放| 欧美韩日高清| 亚洲欧美日韩成人| 午夜激情亚洲| 亚洲国产成人久久综合| 亚洲精品资源| 国产精品一区二区三区久久久| 久久久www成人免费精品| 久久久天天操| 99视频超级精品| 亚洲欧美成人一区二区三区| 一区精品久久| 日韩一区二区高清| 伊人男人综合视频网| 亚洲精品男同| 悠悠资源网久久精品| 夜夜嗨一区二区三区| 一区二区三区在线观看国产| 99av国产精品欲麻豆| 国模精品一区二区三区色天香| 亚洲激情偷拍| 国产日产欧美a一级在线| 亚洲福利在线观看| 国产欧美精品日韩区二区麻豆天美 | 国产日韩av一区二区| 欧美电影在线观看| 国产精品入口麻豆原神| 国产亚洲精品久久久| 亚洲欧洲综合另类| 亚洲欧美日韩一区二区在线 | 亚洲视频欧美视频| 久久久夜夜夜| 性久久久久久| 欧美日韩一区二区三区| 男女av一区三区二区色多| 国产精品毛片在线看| 亚洲精品国产精品国产自| 狠狠噜噜久久| 午夜在线精品| 午夜宅男久久久| 欧美日韩久久| 亚洲人成在线观看一区二区| 狠狠色狠色综合曰曰| 亚洲资源av| 亚洲欧美资源在线| 欧美午夜一区二区| 日韩午夜av在线| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久久久国产精品一区二区| 国产精品国产a| 一区二区欧美视频| 在线视频欧美日韩精品| 欧美激情久久久| 亚洲国产精品电影| 日韩视频第一页| 欧美极品一区| 亚洲乱码国产乱码精品精可以看| 亚洲精品国产拍免费91在线| 牛牛影视久久网| 亚洲激情视频网站| 亚洲亚洲精品在线观看| 欧美手机在线| 中文国产一区| 欧美综合二区| 韩国av一区二区三区在线观看| 欧美一级片一区| 免费观看在线综合色| 在线欧美亚洲| 欧美国产一区视频在线观看| 亚洲精品中文字幕在线| 亚洲欧美国产制服动漫| 国产欧美日本在线| 久久三级视频| 日韩亚洲一区二区| 欧美一区91| 在线观看中文字幕亚洲| 欧美福利一区二区三区| 亚洲伦理网站| 久久xxxx| 日韩亚洲视频| 国产精品网红福利| 久久久国产视频91| 亚洲每日更新| 久久久成人网| 亚洲美女av电影| 国产毛片一区| 欧美成人午夜激情| 亚洲视频一二| 亚洲精品久久久蜜桃| 亚洲一级片在线看| 欧美ed2k| 亚洲欧美日韩国产成人| 国外视频精品毛片| 欧美日韩视频在线观看一区二区三区 | 亚洲自拍三区| 在线观看成人网| 国产精品久久久久aaaa九色| 久久久www成人免费精品| 亚洲精品在线看| 久久嫩草精品久久久精品| av成人免费在线观看| 国语自产偷拍精品视频偷 | 欧美一区午夜精品| 亚洲麻豆av| 亚洲第一福利视频| 欧美在线视频二区| 亚洲色无码播放| 亚洲日本va午夜在线电影| 国产三级精品三级| 欧美日韩一区在线视频| 久久在线播放| 欧美在线免费| 亚洲一区高清| 亚洲伦理在线| 亚洲人精品午夜| 欧美a一区二区| 久久米奇亚洲| 欧美在线视频观看| 午夜精品视频在线| 亚洲在线网站| 亚洲自拍偷拍一区| 国产精品99久久久久久久久| 亚洲美女91| 日韩写真在线| 99精品免费| 亚洲精品日韩综合观看成人91| 一区二区三区在线视频播放| 国产欧美丝祙| 国产日韩欧美电影在线观看| 欧美午夜久久| 欧美日韩国产综合久久| 欧美成人午夜激情在线| 欧美国产精品中文字幕| 欧美成人国产va精品日本一级| 美女诱惑黄网站一区| 久久男人资源视频| 久久精品网址| 另类尿喷潮videofree | 亚洲私人影院在线观看| 亚洲桃花岛网站| 亚洲欧美韩国| 欧美一区二区三区四区夜夜大片| 亚洲综合色自拍一区| 亚洲综合首页| 久久国产一区| 欧美xxx在线观看| 欧美喷潮久久久xxxxx| 欧美三级电影精品| 国产精品永久免费观看| 狠狠色香婷婷久久亚洲精品| 亚洲国产精品www| 亚洲靠逼com| 亚洲在线视频| 久久视频精品在线| 欧美成人激情在线| 亚洲欧洲日本专区| 一区二区免费在线观看| 性做久久久久久久久| 免费欧美日韩国产三级电影| 欧美精品一区二区在线播放| 国产精品久久久久9999| 黄色精品一区二区| 亚洲国产成人av好男人在线观看| 久久人人97超碰精品888| 欧美激情一区二区三区在线视频观看| 亚洲国产91色在线| 夜夜爽av福利精品导航| 亚洲欧美国产日韩天堂区| 免费成人高清| 国产精品毛片在线| 91久久精品美女高潮| 亚洲尤物在线| 亚洲高清久久| 欧美一区二区三区久久精品 | 亚洲免费一级电影| 久久亚洲午夜电影| 国产精品成人国产乱一区| 影视先锋久久| 欧美亚洲自偷自偷| 亚洲经典在线| 久久天天综合| 国产裸体写真av一区二区| 91久久夜色精品国产网站| 欧美在线播放一区| 亚洲精品中文在线| 免费在线成人| 国内精品久久久| 午夜视频久久久久久| 亚洲精品日韩一| 欧美成人a∨高清免费观看| 黄色精品一区| 久久蜜桃资源一区二区老牛|