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

雁過無痕

  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>
            亚洲尤物视频在线| 亚洲激情av在线| 香蕉久久国产| 国产亚洲视频在线| 久久综合一区| 欧美另类极品videosbest最新版本| 99精品国产高清一区二区 | 亚洲高清一二三区| 亚洲激情国产精品| 国产精品欧美风情| 麻豆精品视频在线观看视频| 欧美国产欧美亚州国产日韩mv天天看完整| 1769国产精品| 一区二区三区国产在线观看| 国产偷国产偷亚洲高清97cao| 麻豆精品网站| 国产精品国产三级国产普通话蜜臀 | 久久视频精品在线| 欧美精品 国产精品| 亚洲午夜av电影| 久久爱www久久做| 亚洲免费观看高清完整版在线观看熊| 99视频精品| 在线观看视频日韩| 一二三四社区欧美黄| 国产一区亚洲| 日韩亚洲欧美一区二区三区| 狠狠做深爱婷婷久久综合一区| 亚洲国产另类 国产精品国产免费| 国产精品久久久一区二区| 免费观看一级特黄欧美大片| 欧美视频日韩视频在线观看| 美女视频黄 久久| 欧美日韩国产区一| 欧美91精品| 国产精自产拍久久久久久蜜| 亚洲精品国产系列| 影音先锋日韩资源| 香蕉久久一区二区不卡无毒影院 | 国产精品色婷婷| 亚洲国产一二三| 精品动漫3d一区二区三区| 一道本一区二区| 99国产精品私拍| 久久影院午夜论| 久久精品国产2020观看福利| 欧美性色综合| 妖精成人www高清在线观看| 亚洲春色另类小说| 久久久91精品国产一区二区三区 | 午夜视频在线观看一区二区三区 | 午夜视频一区在线观看| 亚洲一区二区三区中文字幕在线| 欧美a一区二区| 男女激情久久| 在线色欧美三级视频| 久久精品国产综合精品| 久久爱www.| 国产日韩欧美在线观看| 亚洲欧美区自拍先锋| 午夜精品福利一区二区三区av| 欧美视频一区| 亚洲无线视频| 欧美在线日韩精品| 国产一区二区在线免费观看 | 欧美日韩一区二区在线观看| 亚洲毛片视频| 亚洲男人av电影| 国产精品美女午夜av| 亚洲欧美一区二区三区久久| 欧美一区二区三区在线| 国产三级精品三级| 久久久久久一区| 亚洲第一精品福利| 在线亚洲国产精品网站| 国产精品一区一区三区| 欧美亚洲一区二区在线观看| 久久伊伊香蕉| 亚洲毛片视频| 国产精品色婷婷| 久久久久久久999精品视频| 欧美成人高清| 亚洲视频一区| 国产日韩在线不卡| 欧美mv日韩mv国产网站app| 日韩亚洲精品视频| 久久国产一区二区| 亚洲精品在线视频| 国产精品素人视频| 玖玖精品视频| 亚洲一区二区三区免费观看| 久久这里只有精品视频首页| 日韩一级免费| 国产亚洲综合精品| 欧美大片一区二区三区| 亚洲欧美国产三级| 欧美成人免费全部| 亚洲免费网址| 亚洲经典在线看| 国产精品爽爽爽| 免费观看亚洲视频大全| 在线天堂一区av电影| 麻豆精品视频| 午夜视频久久久| 亚洲精品视频在线| 国产有码在线一区二区视频| 欧美日韩国产黄| 久久久久久久久久久成人| 日韩一区二区久久| 欧美电影电视剧在线观看| 午夜精品久久久久久久99热浪潮| 在线观看的日韩av| 国产日韩精品电影| 欧美午夜宅男影院| 欧美精品三级日韩久久| 久久蜜桃资源一区二区老牛| 亚洲一区二区精品在线| 亚洲三级视频在线观看| 欧美~级网站不卡| 久久久国产精品一区二区中文| 亚洲午夜成aⅴ人片| 亚洲人人精品| 亚洲黄色三级| 精品不卡视频| 国产真实精品久久二三区| 国产精品久久久久一区二区三区| 欧美成人午夜激情在线| 免费成人高清视频| 久久人人看视频| 久久成人精品电影| 午夜日韩电影| 午夜一级久久| 香蕉成人伊视频在线观看| 宅男66日本亚洲欧美视频 | 久久婷婷久久一区二区三区| 欧美一区成人| 欧美一区亚洲| 久久精品二区亚洲w码| 久久成人精品无人区| 欧美一区二区三区电影在线观看| 午夜精品亚洲| 欧美一区二区精品久久911| 欧美在线地址| 久久久亚洲精品一区二区三区| 欧美在线啊v| 久久日韩精品| 欧美+日本+国产+在线a∨观看| 免费短视频成人日韩| 欧美成年人视频网站| 亚洲国产成人tv| 亚洲美女色禁图| 一本色道**综合亚洲精品蜜桃冫 | 亚洲日韩欧美视频一区| 亚洲免费大片| 亚洲在线视频观看| 久久成人一区二区| 女仆av观看一区| 欧美日韩一区二区欧美激情| 欧美午夜免费影院| 国产视频一区在线观看| 在线免费一区三区| 99国产成+人+综合+亚洲欧美| 国产精品99久久久久久人| 亚洲一级片在线观看| 欧美中文字幕在线播放| 狼狼综合久久久久综合网| 亚洲激情另类| 亚洲自拍偷拍视频| 久久综合中文| 国产精品日韩电影| 亚洲黄色尤物视频| 午夜国产不卡在线观看视频| 久久久水蜜桃av免费网站| 亚洲电影在线播放| 亚洲欧美日韩在线不卡| 欧美大片91| 国产在线精品二区| 一区二区三区视频观看| 久久精品国产综合| 99国产一区| 久久免费视频网| 欧美系列一区| 91久久综合亚洲鲁鲁五月天| 午夜久久久久| 亚洲激情国产精品| 久久久久久网站| 国产精品资源| 一区二区欧美精品| 欧美91福利在线观看| 午夜免费久久久久| 欧美日韩三级一区二区| 亚洲国产欧美日韩精品| 久久福利精品| 在线亚洲美日韩| 欧美精品成人在线| 在线日本成人| 久久在线观看视频| 欧美一区二区黄色| 国产精品久久久久久av下载红粉| 最近中文字幕mv在线一区二区三区四区|