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

雁過無痕

  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 閱讀(4771) 評論(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>
            国产免费观看久久| 亚洲综合日韩中文字幕v在线| 美国十次成人| 亚洲国产免费看| 日韩一区二区福利| 久久久久综合网| 欧美性猛交99久久久久99按摩 | 欧美体内she精视频| 国内成人精品2018免费看| 国产日韩欧美精品综合| 一区在线视频| 欧美一区激情视频在线观看| 亚洲国产mv| 久久久久久香蕉网| 国产精品综合| 亚洲综合社区| 亚洲精品社区| 欧美成人免费一级人片100| 国产精品亚洲网站| 亚洲欧美日韩成人| 一本色道久久88综合亚洲精品ⅰ| 欧美高清在线一区二区| 精品不卡一区| 欧美sm重口味系列视频在线观看| 久久成人羞羞网站| 国产色产综合色产在线视频| 亚洲欧美色一区| 中文日韩在线视频| 国产精品久久久久久久久久三级 | 欧美国产亚洲视频| 欧美一激情一区二区三区| 一本大道久久精品懂色aⅴ| 欧美精品 日韩| 亚洲午夜精品一区二区三区他趣| 亚洲欧洲日韩综合二区| 欧美极品在线播放| 夜夜爽www精品| 99re热精品| 国产精品入口夜色视频大尺度| 午夜精品福利在线观看| 性感少妇一区| 亚洲经典一区| 一区二区激情视频| 国产亚洲一二三区| 欧美电影在线观看完整版| 免费久久99精品国产自| 一区二区三区导航| 久久久人成影片一区二区三区| 激情一区二区三区| 亚洲人成在线播放| 国产精品永久免费在线| 欧美 日韩 国产一区二区在线视频| 欧美国产在线视频| 久久成人精品电影| 欧美日韩第一页| 久久久夜夜夜| 国产精品国产福利国产秒拍| 免费毛片一区二区三区久久久| 欧美另类videos死尸| 久久夜色精品国产欧美乱极品| 欧美视频精品在线| 亚洲国产精品久久| 一区二区在线视频播放| 亚洲一区三区在线观看| 99热在这里有精品免费| 久久一区二区精品| 久久久久青草大香线综合精品| 国产精品成人一区二区网站软件| 亚洲国产午夜| 在线看成人片| 久久久久www| 久久综合伊人77777蜜臀| 国产精品一卡二| 亚洲欧美欧美一区二区三区| 亚洲女同性videos| 欧美亚州一区二区三区 | 久久午夜色播影院免费高清| 久久国产精品久久国产精品| 国产精品美女久久久久av超清| 99视频有精品| 亚洲私拍自拍| 欧美色播在线播放| 在线免费观看一区二区三区| 久久久久综合| 国产精品在线看| 久久黄色级2电影| 欧美激情精品久久久六区热门 | 久久久久久9| 亚洲精品国产无天堂网2021| 欧美黑人多人双交| 亚洲视频成人| 亚洲高清视频在线| 亚洲在线观看视频| 韩国av一区二区三区| 欧美极品一区二区三区| 亚洲一区激情| 亚洲国产精品热久久| 午夜精品久久久久99热蜜桃导演| 激情丁香综合| 欧美午夜女人视频在线| 久久久免费观看视频| 亚洲婷婷综合色高清在线| 免费视频亚洲| 欧美一二三区精品| 亚洲日韩欧美视频一区| 国产精品综合| 国产精品久久久久久久浪潮网站| 麻豆国产精品一区二区三区| 性xx色xx综合久久久xx| 99精品热视频只有精品10| 欧美激情视频一区二区三区不卡| 欧美在线中文字幕| 亚洲欧美日韩另类| 99视频精品全部免费在线| 亚洲福利国产| 在线观看不卡| 久久久久国产精品一区三寸| 欧美在线观看日本一区| 在线视频精品一区| 99亚洲一区二区| 亚洲免费观看高清完整版在线观看熊| 欧美1区3d| 你懂的网址国产 欧美| 久久在线免费观看视频| 欧美主播一区二区三区美女 久久精品人 | 欧美视频精品一区| 欧美日韩精品综合在线| 欧美视频导航| 国产精品推荐精品| 国产亚洲一区二区三区| 在线观看国产精品淫| 91久久精品视频| 中文欧美日韩| 久久精品视频播放| 欧美1区2区视频| 一本一本a久久| 中日韩美女免费视频网址在线观看| 99精品视频免费| 欧美在线免费视屏| 欧美精品1区2区| 国产亚洲精品久久久久动| 亚洲高清不卡| 欧美一区二区三区四区高清 | 国产精品欧美日韩一区| 一区二区自拍| 欧美亚洲视频在线看网址| 欧美二区乱c少妇| 亚洲女人天堂av| 欧美国产精品| 在线观看福利一区| 久久国产精品99国产| 亚洲人成艺术| 美女亚洲精品| 国内成+人亚洲| 午夜日韩在线| 宅男在线国产精品| 欧美久久久久久久久久| 伊人精品成人久久综合软件| 久久成人精品电影| 欧美在线免费播放| 国内外成人免费激情在线视频网站| 亚洲无限av看| 日韩亚洲欧美一区二区三区| 欧美裸体一区二区三区| 91久久亚洲| 亚洲黄色在线观看| 欧美日韩国产黄| 亚洲一区制服诱惑| 欧美一级理论片| 国产一区二区成人| 久久在线免费观看| 久久婷婷国产麻豆91天堂| 一区视频在线| 亚洲精品一区二区三区福利| 欧美日韩精品二区| 亚洲人成网站777色婷婷| 欧美日韩理论| 国产精品试看| 久久久xxx| 久久久久久亚洲精品中文字幕| 亚洲国产成人精品女人久久久 | 亚洲久久在线| 欧美激情一区二区三区在线视频观看 | 亚洲制服欧美中文字幕中文字幕| 亚洲精品欧美日韩专区| 欧美三区不卡| 久久精品视频播放| 美国十次了思思久久精品导航| 亚洲精品视频在线观看免费| 亚洲激情亚洲| 国产精品乱看| 亚洲大胆视频| 国产精品乱码| 欧美成人资源网| 欧美天天影院| 欧美激情精品久久久久久久变态| 欧美日韩国产二区| 久久久天天操| 欧美日韩国产一区精品一区 | 欧美一区二区精品久久911|