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

雁過無痕

  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>
            欧美成人久久| 一区二区三区高清| 一本色道久久综合亚洲精品不| 国产日韩综合| 国产原创一区二区| 在线日韩中文字幕| 一本久久a久久免费精品不卡| 亚洲一区免费| 久久狠狠婷婷| 亚洲国产精品一区制服丝袜 | 免费久久精品视频| 欧美成人午夜免费视在线看片| 欧美激情一区二区三区全黄 | 欧美午夜电影完整版| 国产精品视频精品| 黄色成人在线网站| 日韩午夜精品| 久久久久久久波多野高潮日日 | 91久久久精品| 亚洲在线观看| 欧美激情第六页| 国产亚洲精品bt天堂精选| 亚洲国产欧美日韩另类综合| 亚洲曰本av电影| 亚洲电影av| 欧美一区二区| 欧美视频在线视频| 亚洲国产精品久久人人爱蜜臀| 亚洲一区二区三区视频播放| 黄色精品一二区| 亚洲自拍三区| 欧美暴力喷水在线| 国产精品一区二区久久精品| 在线播放亚洲一区| 午夜一级在线看亚洲| 亚洲福利视频二区| 欧美中文在线免费| 国产精品久久网站| av不卡在线观看| 欧美国产一区二区在线观看 | 看片网站欧美日韩| 中文av一区特黄| 欧美成人免费小视频| 国产一区导航| 欧美一区二区精品久久911| 亚洲三级电影全部在线观看高清| 久久国产99| 国产视频一区三区| 欧美一区不卡| 亚洲欧美久久| 国产精品热久久久久夜色精品三区| 亚洲乱码国产乱码精品精天堂| 免费av成人在线| 久久久777| 激情一区二区三区| 麻豆av福利av久久av| 欧美中文在线字幕| 国产性天天综合网| 久久精品官网| 欧美在线观看日本一区| 国产日韩亚洲| 久久久久国产精品一区| 久久9热精品视频| 精品成人一区二区三区| 久久久夜夜夜| 久久婷婷亚洲| 日韩视频在线一区| 夜色激情一区二区| 国产精品久久久久久久久久久久久久| 国产精品99久久久久久久久| 99国产精品一区| 国产精品国产亚洲精品看不卡15 | 伊人成人开心激情综合网| 久久精品国产亚洲一区二区| 久久成人在线| 91久久综合| av成人黄色| 国产亚洲福利一区| 欧美福利一区| 欧美另类人妖| 午夜一区不卡| 久久久人成影片一区二区三区| 伊人婷婷欧美激情| 亚洲精品乱码久久久久久黑人 | 久久综合国产精品| 久久亚洲综合网| 一区二区国产在线观看| 亚洲欧美成人精品| 韩国自拍一区| 亚洲精品人人| 国产一区二区三区在线观看免费视频 | 欧美日韩国产91| 午夜伦欧美伦电影理论片| 久久视频一区二区| 亚洲综合日韩| 免费成人在线观看视频| 午夜精品视频一区| 欧美成年网站| 久久精品成人| 欧美日韩精品在线视频| 久久夜色精品| 国产精品区二区三区日本| 欧美激情一区二区三区四区 | 国产一区二区三区久久| 亚洲免费观看| 亚洲成色最大综合在线| 亚洲午夜激情在线| 亚洲理论在线| 久久久一本精品99久久精品66| 亚洲一区欧美一区| 欧美激情一区二区| 蜜桃av一区二区| 国产午夜精品在线观看| 日韩视频―中文字幕| 亚洲精品国产精品乱码不99| 久久成人一区二区| 欧美一区二区三区四区夜夜大片| 欧美理论大片| 亚洲欧洲一区二区三区在线观看| 伊人精品在线| 久久精品在线免费观看| 欧美一区深夜视频| 国产精品久久中文| 在线视频一区二区| 亚洲婷婷在线| 欧美特黄一级大片| 亚洲作爱视频| 亚洲一区免费视频| 国产精品乱人伦一区二区| 日韩亚洲综合在线| 亚洲午夜国产一区99re久久| 欧美精品在线观看91| 亚洲啪啪91| 99精品欧美一区二区三区综合在线| 美女日韩欧美| 亚洲国产精品成人久久综合一区| 亚洲国内精品在线| 欧美极品aⅴ影院| 亚洲乱码国产乱码精品精98午夜 | 欧美一区二区三区视频在线观看 | 国产一区二区久久久| 米奇777在线欧美播放| 亚洲欧美日韩一区二区三区在线 | 亚洲精品视频在线播放| 久久成人人人人精品欧| 久久激情一区| 国产一区二区按摩在线观看| 亚洲综合日韩在线| 久久免费一区| 亚洲欧洲精品一区二区三区| 欧美激情91| 亚洲少妇最新在线视频| 久久丁香综合五月国产三级网站| 国产一区二区三区久久久久久久久 | 国产精品成人aaaaa网站| 亚洲伦理中文字幕| 午夜精品久久久久久久99热浪潮| 国产精品一区二区久久国产| 欧美在线免费视屏| 亚洲国产精品视频| 亚洲视频高清| 国产综合欧美| 欧美精品网站| 香蕉成人久久| 最新中文字幕一区二区三区| 亚洲伊人伊色伊影伊综合网| 国产欧美综合在线| 女仆av观看一区| 亚洲免费一在线| 欧美激情a∨在线视频播放| 中文久久精品| 伊人影院久久| 国产精品美女999| 免费的成人av| 午夜精品视频在线观看一区二区| 欧美韩日一区二区三区| 午夜亚洲视频| 亚洲免费观看高清完整版在线观看| 国产精品一区久久久| 欧美福利在线观看| 欧美在线资源| 亚洲香蕉网站| 亚洲精选国产| 欧美高清一区| 可以看av的网站久久看| 欧美一级免费视频| 亚洲视频在线观看| 亚洲日本成人在线观看| 激情伊人五月天久久综合| 国产精品一区二区a| 欧美日韩综合视频网址| 美腿丝袜亚洲色图| 久久国产成人| 羞羞视频在线观看欧美| 99riav国产精品| 亚洲国产精品激情在线观看| 久久亚洲国产精品一区二区 | 久久精品一区二区| 亚洲永久免费av| 亚洲午夜视频|