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

雁過無痕

  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>
            欧美+亚洲+精品+三区| 午夜精品久久久久久99热软件| 亚洲一区二区在线视频| 亚洲免费小视频| 亚洲精品美女久久久久| 亚洲免费在线| 欧美精品国产精品日韩精品| 在线观看视频亚洲| 一本色道久久综合亚洲精品不卡| 亚洲精品欧洲精品| 欧美在线亚洲| 在线国产精品播放| 亚洲欧美不卡| 久久三级福利| 又紧又大又爽精品一区二区| 亚洲欧美国产视频| 久久免费99精品久久久久久| 亚洲免费一级电影| 欧美一乱一性一交一视频| 亚洲精品国产品国语在线app| 欧美三级乱人伦电影| 性做久久久久久免费观看欧美| 久久激情五月激情| 久久丁香综合五月国产三级网站| 国内一区二区在线视频观看| 久久亚洲国产成人| 久久免费视频这里只有精品| 久久久久久久久久久久久9999| 一区二区三区日韩精品| 一区二区三区精密机械公司 | 久久在线免费| 亚洲欧美日韩在线不卡| 国产专区一区| 在线亚洲成人| 欧美日韩黄色一区二区| 久久久久久久999| 国产精品看片资源| 久久久精品国产99久久精品芒果| 一区二区三区视频在线播放| 久久久欧美精品| 亚洲视频999| 免费黄网站欧美| 巨乳诱惑日韩免费av| 欧美激情一区二区三级高清视频| 亚洲一区三区在线观看| 免费看的黄色欧美网站| 欧美国产综合一区二区| 国产在线国偷精品产拍免费yy| 亚洲尤物在线| 日韩视频免费在线| 欧美亚洲综合网| 亚洲网站视频| 黑人巨大精品欧美一区二区| 久久综合激情| 久久野战av| 激情综合亚洲| 一本久久精品一区二区| 亚洲欧美综合v| 蜜臀99久久精品久久久久久软件| 在线视频欧美日韩| 欧美日韩视频在线一区二区观看视频| 午夜影视日本亚洲欧洲精品| 久久久久久久一区二区| 欧美jizzhd精品欧美喷水| 1769国产精品| 欧美日韩亚洲综合| 中日韩美女免费视频网站在线观看| 亚洲人成艺术| 国产精品地址| 亚洲欧美日韩另类精品一区二区三区| 久久久国产精彩视频美女艺术照福利| 在线免费观看视频一区| 欧美一区二区三区播放老司机| 亚洲破处大片| 国产一区二区三区不卡在线观看| 亚洲天堂偷拍| 亚洲国产精品久久91精品| 亚洲三级免费电影| 国产精品盗摄久久久| 欧美激情中文字幕一区二区| 一区二区三区久久精品| 亚洲一区二区三区影院| 欧美午夜精品理论片a级按摩| 久久激情网站| 亚洲人屁股眼子交8| 亚洲欧美成人网| 亚洲高清视频的网址| 国产精品欧美日韩久久| 欧美在线免费视频| 日韩视频一区二区三区| 欧美国产乱视频| 亚洲一区二区三区精品视频| 国产精品私拍pans大尺度在线| 欧美日韩免费在线观看| 国产日韩亚洲欧美综合| 久久久亚洲精品一区二区三区 | 欧美国产日韩一区二区三区| 国产酒店精品激情| 国产亚洲欧美一区| 国产欧美亚洲视频| 国产精品制服诱惑| 国产片一区二区| 国产三级精品三级| 好吊日精品视频| 在线观看91精品国产麻豆| 久久久久久久一区二区| 99pao成人国产永久免费视频| 欧美91视频| 亚洲国产激情| 一区二区三区 在线观看视频| 欧美在线播放一区| 国产一区二区| 亚洲美女啪啪| 欧美激情乱人伦| 欧美在线不卡视频| 亚洲美女电影在线| 欧美激情视频网站| 国产精品一区=区| 精品二区视频| 亚洲一级在线| 欧美亚洲视频在线观看| 亚洲狠狠丁香婷婷综合久久久| 亚洲电影免费观看高清完整版在线| 在线观看亚洲一区| 亚洲欧美日韩一区二区三区在线观看 | 亚洲最新中文字幕| 亚洲女性喷水在线观看一区| 久久色在线观看| 亚洲激情精品| 欧美亚洲日本网站| 亚洲精品一区二区在线| 香蕉成人伊视频在线观看| 欧美一区二区三区视频在线| 免费久久99精品国产自| 国产一区免费视频| 狂野欧美激情性xxxx欧美| 久久精品国产99| 国产精品v欧美精品v日本精品动漫| 一区二区亚洲精品| 欧美在线精品一区| 欧美一区二区三区四区在线观看地址 | 欧美在线观看你懂的| 欧美日韩国产综合视频在线观看| 国产精品第一区| 亚洲一区二区成人在线观看| 在线一区欧美| 国产日韩精品一区二区三区| 欧美一区二区视频在线| 亚洲国产综合视频在线观看| 久久久久九九九| 这里只有视频精品| 欧美一区二区视频在线观看2020| 久久综合色婷婷| 午夜精品免费| 欧美v日韩v国产v| 西西人体一区二区| 免费成人毛片| 亚洲欧美精品在线| 午夜影院日韩| 午夜宅男久久久| 欧美在线视频观看免费网站| 狠狠色丁香婷婷综合久久片| 亚洲精品国精品久久99热| 亚洲第一精品久久忘忧草社区| 亚洲视频精品| 日韩视频欧美视频| 欧美在线亚洲一区| 久久嫩草精品久久久精品| 欧美三级视频在线| 欧美成人精精品一区二区频| 欧美精品综合| 欧美日韩综合在线免费观看| 亚洲欧美在线免费| 欧美超级免费视 在线| 亚洲免费婷婷| 欧美日韩午夜精品| 免费不卡在线视频| 国产主播一区二区三区四区| 欧美成人影音| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲高清视频在线观看| 国产精品爽爽爽| 99视频在线精品国自产拍免费观看 | 亚洲电影在线免费观看| 午夜久久美女| 亚洲精品国产系列| 久久久久久97三级| 欧美中文字幕视频| 国产精品一区二区欧美| aa级大片欧美三级| 亚洲欧美日本视频在线观看| 国产精品狠色婷| 亚洲视频 欧洲视频| 欧美激情精品久久久久久黑人| 欧美有码在线视频| 亚洲国产精品精华液2区45| 欧美日韩国产另类不卡| 欧美专区在线观看一区| 午夜久久美女| 亚洲免费不卡|