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

雁過無痕

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::

《編程之美》讀書筆記08:2.9 Fibonacci序列

計算Fibonacci序列最直接的方法就是利用遞推公式 F(n+2)=F(n+1)+F(n)。而用通項(xiàng)公式來求解是錯誤的,用浮點(diǎn)數(shù)表示無理數(shù)本來就有誤差,經(jīng)過n次方后,當(dāng)n相當(dāng)大時,誤差能足夠大到影響浮點(diǎn)數(shù)轉(zhuǎn)為整數(shù)時的精度,得到的結(jié)果根本不準(zhǔn)。

用矩陣來計算,雖然時間復(fù)雜度降到O(log n),但要用到矩陣類,相當(dāng)麻煩。觀察:

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),時間復(fù)雜度為 O(lg n)。如:要計算F(58),由 58 -> 29,30 -> 14,15 -> 7,8 -> 3,4 -> 1,2 可知只要算5次。可以用一個棧保存要計算的數(shù),實(shí)際上,將n的最高位1(假設(shè)在第k位)左邊的0去除掉后,第m次要計算的數(shù)是第k位到第k-m+1位這m個位組成的值t(m),則第m-1次要計算的數(shù)為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)最后四位數(shù)(某道ACM題)的代碼。


 

/*   Fibonacci數(shù)列第N個數(shù)的最后4位數(shù)
    注意,當(dāng) N>93 時 第N個數(shù)的值超過64位無符號整數(shù)可表示的范圍。
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是負(fù)數(shù),造成結(jié)果不對
      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數(shù)列(非矩陣法)[未登錄] 2010-07-16 11:18 Klion
你好,這篇文章下面這段文字“實(shí)際上,將n的最高位1(假設(shè)在第k位)左邊的0去除掉后,第m次要計算的數(shù)是第k位到第k-m+1位這m個位組成的值t(m),則第m-1次要計算的數(shù)為t(m-1),且t(m)=2*t(m-1)+(第k-m+1位是否為1)。若第m-1次計算得到了f(k)和f(k+1),則第m次計算:”
不是看的很懂,希望博主給解釋下。
主要有以下幾點(diǎn)疑問:1.那個最高位左邊的是比最高位高的位還是低的位。
2.那個t(m)怎么算的  回復(fù)  更多評論
  

# re: O(log n)求Fibonacci數(shù)列(非矩陣法) 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.   回復(fù)  更多評論
  

# re: O(log n)求Fibonacci數(shù)列(非矩陣法) 2010-07-21 00:35 flyinghearts
@Klion

以58為例其二進(jìn)制表示(最左邊的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)?。健?
t(2)?。健?
t(3)?。健?
t(4) = 14
t(5) = 29
t(6)?。健?8

  回復(fù)  更多評論
  

# re: O(log n)求Fibonacci數(shù)列(非矩陣法)[未登錄] 2010-07-26 11:40 Klion
@flyinghearts
恩,謝謝了。后來我自己也動手劃了下,原來我一開始沒理解到,現(xiàn)在我知道那個t(m)怎么算的,也用自己的理解寫了點(diǎn)求出這個是干嘛的。
我理解的就是這個t(m)其實(shí)就是一個逆向工程,先是判斷右移(m-1)位之后的情況,看這個數(shù)是奇數(shù)還是偶數(shù),如果是奇數(shù)就由哪兩個數(shù)得來,如果是偶數(shù),就由哪兩個數(shù)得來,由這個可以得到我們要算的結(jié)果是算出來的這兩個中的小者。  回復(fù)  更多評論
  

# re: O(log n)求Fibonacci數(shù)列(非矩陣法) 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
(實(shí)際上,t(i)沒必要計算,只要判斷第k-m+1位是否為1就可以了。)
根據(jù)這兩個情況,決定使用那幾個公式。


我最初的代碼,就是用一個棧,保存n每次右移1位的結(jié)果,
最后根據(jù)棧頂是否是奇數(shù),來決定調(diào)用那兩個公式,出棧。
反復(fù)至棧為空。



  回復(fù)  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數(shù)列(非矩陣法)[未登錄] 2010-10-06 05:47 april
謝謝帖主的分享,不過code算出來的結(jié)果是錯的,貼主有測試過嗎?
遞推公式 F(n+2)=F(n)+F(n-1) 是錯的
正確的是 F(n+1)=F(n)+F(n-1), 我想這是為什么算出來的結(jié)果不是F(n), 而是F(n-1).
  回復(fù)  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數(shù)列(非矩陣法)[未登錄] 2010-10-06 06:01 april
@april
收回我的評論,雖然遞推公式寫錯(typo),但是code返回結(jié)果正確。。  回復(fù)  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數(shù)列(非矩陣法) 2010-12-02 23:34 flyinghearts
@april
確實(shí)把公式打錯了:
F(n+2)=F(n)+F(n-1) 應(yīng)該是 F(n+1) = F(n) + F(n-1)
不過后面的公式推導(dǎo)沒問題。

  回復(fù)  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數(shù)列(非矩陣法) 2012-09-03 10:26
不過實(shí)測的結(jié)果:是matrix版(O(logn))最快,去遞歸的(bottom-up)版(O(n))次之,然后是這個版本(O(logn)),可能是乘法的緣故  回復(fù)  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數(shù)列(非矩陣法) 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/
歡迎拍磚  回復(fù)  更多評論
  

# re: 《編程之美》讀書筆記08:2.9 Fibonacci序列 —— O(log n)求Fibonacci數(shù)列(非矩陣法) 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/  回復(fù)  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品永久免费| 亚洲高清免费在线| 亚洲国产精品va在线看黑人动漫 | 在线综合视频| 欧美激情导航| 亚洲伊人一本大道中文字幕| 久久人91精品久久久久久不卡| 欧美一区二区三区在线观看| 性欧美video另类hd性玩具| 国产一区二区精品丝袜| 亚洲免费一级电影| 性伦欧美刺激片在线观看| 亚洲国产日日夜夜| 亚洲免费av电影| 国产精品一区二区三区免费观看 | 一区三区视频| 国产精品一级二级三级| 一区二区国产精品| 亚洲国产成人av| 久久精品国产久精国产思思| 在线高清一区| 久久影视三级福利片| 欧美一区成人| 欧美成va人片在线观看| 欧美一二三区精品| 亚洲黄色性网站| 在线亚洲观看| 一区二区三区 在线观看视| 欧美电影在线观看| 亚洲欧美在线另类| 日韩西西人体444www| 国产精品porn| 亚洲日本视频| 性亚洲最疯狂xxxx高清| 久久久999| 亚洲电影视频在线| 亚洲欧美日韩在线不卡| 欧美国产极速在线| 国产婷婷色一区二区三区在线 | 一区福利视频| 国产精品99久久久久久宅男| 久久久国产午夜精品| 亚洲免费av观看| 欧美成人69| 狠狠狠色丁香婷婷综合激情| 亚洲免费一区二区| 99亚洲一区二区| 欧美 亚欧 日韩视频在线| 国产一区二区久久| 亚洲欧美日本国产专区一区| 亚洲国产一区二区精品专区| 久久精品夜夜夜夜久久| 国产毛片久久| 久久激情视频久久| 亚洲欧美日韩在线一区| 国产精品午夜视频| 亚洲中字在线| 亚洲一区在线观看免费观看电影高清| 老司机久久99久久精品播放免费| 国产精品自拍三区| 欧美专区日韩专区| 亚洲一区在线直播| 国产香蕉久久精品综合网| 午夜精品影院在线观看| 亚洲色在线视频| 国产精品久久婷婷六月丁香| 亚洲网站啪啪| 亚洲一级免费视频| 国产免费观看久久黄| 欧美在线精品免播放器视频| 亚洲午夜一二三区视频| 国产精品久久久久久久浪潮网站 | 国产精品伊人日日| 午夜精品久久久久久久99樱桃| 一区二区三区四区精品| 国产精品一区二区在线观看| 久久国产精品一区二区三区四区| 性感少妇一区| 亚洲高清网站| 一区二区高清在线观看| 国产偷久久久精品专区| 久久综合五月| 欧美理论片在线观看| 午夜激情久久久| 久久久久久综合| 亚洲精品系列| 中日韩男男gay无套 | 红桃视频亚洲| 亚洲电影激情视频网站| 欧美日韩一二三四五区| 欧美一区二区三区四区视频| 久久久久国产精品一区| 一区二区三区毛片| 久久精品日韩欧美| aa级大片欧美三级| 午夜在线播放视频欧美| 亚洲精品网站在线播放gif| 亚洲专区一区二区三区| 91久久视频| 性娇小13――14欧美| 亚洲精品永久免费| 翔田千里一区二区| 中文一区二区| 免费在线成人| 久久久91精品国产一区二区三区| 欧美精品一区在线观看| 久久中文精品| 国产精品男gay被猛男狂揉视频| 欧美**字幕| 国产日韩欧美一区| 中文久久精品| 99re视频这里只有精品| 久久久噜噜噜久久狠狠50岁| 亚洲一区中文| 欧美高清视频www夜色资源网| 一本久久青青| 亚洲欧美视频在线观看| 乱人伦精品视频在线观看| 欧美一级二级三级蜜桃| 欧美日韩国产精品| 亚洲国产另类久久久精品极度| 黄色成人在线| 久久成人久久爱| 久久精品国产亚洲精品| 国产精品高清一区二区三区| 亚洲三级网站| 亚洲破处大片| 久久天天狠狠| 久久综合久色欧美综合狠狠| 国产精品永久入口久久久| 99精品欧美一区二区蜜桃免费| 亚洲精品视频在线播放| 蜜臀av性久久久久蜜臀aⅴ| 久久免费黄色| 韩国av一区二区三区四区| 西瓜成人精品人成网站| 欧美亚洲系列| 国产中文一区| 久久婷婷蜜乳一本欲蜜臀| 久久久久久穴| 亚洲第一免费播放区| 久久综合给合久久狠狠狠97色69| 久久久一区二区三区| 国产一区二区成人| 欧美一区免费视频| 久久亚洲二区| 亚洲国产日韩欧美在线99| 久久香蕉国产线看观看av| 亚洲高清色综合| 中国成人在线视频| 国产精品自拍在线| 久久久久99| 亚洲电影免费在线观看| 一本色道久久99精品综合| 欧美日韩亚洲视频| 午夜在线观看欧美| 欧美激情久久久久| 亚洲一级二级在线| 国产亚洲综合精品| 噜噜噜91成人网| 日韩视频在线免费观看| 欧美在线高清| 亚洲国产mv| 国产精品久久久久国产精品日日| 香蕉久久夜色精品国产使用方法| 男人的天堂亚洲| 亚洲图中文字幕| 激情文学一区| 欧美日本亚洲| 亚洲欧美综合国产精品一区| 免费在线观看成人av| 在线综合亚洲欧美在线视频| 国内精品一区二区| 欧美日韩一区二区免费在线观看| 亚洲欧美日本精品| 亚洲电影免费观看高清完整版| 亚洲欧美三级在线| 亚洲国产另类 国产精品国产免费| 欧美日韩另类丝袜其他| 久久国产精品高清| 日韩一级在线| 欧美3dxxxxhd| 欧美一区二区在线播放| 亚洲精品久久久久久久久久久久| 国产日韩精品视频一区| 欧美日韩国产综合新一区| 欧美在线地址| 亚洲在线视频观看| 久久综合图片| 亚洲欧美精品伊人久久| 亚洲激情成人| 久久在线免费观看| 午夜精品网站| 99精品欧美| 亚洲国产欧美一区二区三区同亚洲| 国产精品区一区| 欧美老女人xx| 欧美二区视频| 免费在线一区二区| 久久亚洲国产成人|