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

雁過無痕

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

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

計算Fibonacci序列最直接的方法就是利用遞推公式 F(n+2)=F(n+1)+F(n)。而用通項公式來求解是錯誤的,用浮點數(shù)表示無理數(shù)本來就有誤差,經(jīng)過n次方后,當(dāng)n相當(dāng)大時,誤差能足夠大到影響浮點數(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ù),實際上,將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 閱讀(4752) 評論(11)  編輯 收藏 引用 所屬分類: 算法編程之美

評論

# re: O(log n)求Fibonacci數(shù)列(非矩陣法)[未登錄] 2010-07-16 11:18 Klion
你好,這篇文章下面這段文字“實際上,將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次計算:”
不是看的很懂,希望博主給解釋下。
主要有以下幾點疑問: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) = 1
t(2) = 3
t(3) = 7
t(4) = 14
t(5) = 29
t(6) = 58

  回復(fù)  更多評論
  

# re: O(log n)求Fibonacci數(shù)列(非矩陣法)[未登錄] 2010-07-26 11:40 Klion
@flyinghearts
恩,謝謝了。后來我自己也動手劃了下,原來我一開始沒理解到,現(xiàn)在我知道那個t(m)怎么算的,也用自己的理解寫了點求出這個是干嘛的。
我理解的就是這個t(m)其實就是一個逆向工程,先是判斷右移(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
(實際上,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
確實把公式打錯了:
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
不過實測的結(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>
            亚洲激情精品| 国产欧美一区二区精品性| 亚洲成人在线观看视频| 久久亚洲欧美| 老司机一区二区| 亚洲毛片在线免费观看| 亚洲精品乱码久久久久久黑人 | 欧美自拍偷拍午夜视频| 亚洲中字黄色| 1024成人| 亚洲美女中文字幕| 国产精品网曝门| 美女视频黄免费的久久| 欧美成人按摩| 欧美一区二区三区日韩视频| 久久精品二区亚洲w码| 91久久国产自产拍夜夜嗨| 日韩视频精品在线观看| 国产欧美一区二区三区国产幕精品 | 国产精品国产馆在线真实露脸| 欧美一区视频| 免费国产一区二区| 午夜欧美电影在线观看| 免费成人高清在线视频| 欧美亚洲免费电影| 免费成人黄色av| 欧美一区二区三区日韩| 欧美国产日本在线| 久久久噜噜噜久久久| 欧美男人的天堂| 久久天天躁狠狠躁夜夜爽蜜月 | 久久久亚洲人| 亚洲在线视频一区| 亚洲一区视频| 久久精品国产一区二区三区免费看 | 亚洲视频一区在线观看| 久久另类ts人妖一区二区| 亚洲欧美成人综合| 牛夜精品久久久久久久99黑人 | 欧美一站二站| 欧美日韩mp4| 欧美激情一区在线| 国内不卡一区二区三区| 亚洲影视在线播放| 一区二区三区欧美亚洲| 欧美freesex交免费视频| 久久久久一区| 国产性猛交xxxx免费看久久| 日韩亚洲一区在线播放| 亚洲欧洲一区二区三区| 久久久久久久久久久久久女国产乱 | 欧美成人影音| 国内外成人在线视频| 亚洲免费影视| 午夜免费电影一区在线观看| 欧美三日本三级三级在线播放| 欧美激情一区| 亚洲人妖在线| 欧美激情亚洲综合一区| 亚洲高清在线精品| 亚洲精品国产精品国自产在线| 久久久九九九九| 久久久久国产一区二区| 国产一区二区精品久久99| 亚洲一区二区三区在线播放| 亚洲免费在线视频| 国产精品青草久久| 亚洲欧美影音先锋| 久久久蜜桃一区二区人| 国产一区二区三区视频在线观看 | 亚洲私人影院| 欧美一区二区视频观看视频| 国产情侣久久| 久久久久久97三级| 亚洲高清一区二| 一本久道久久综合中文字幕| 欧美日韩不卡合集视频| 99在线|亚洲一区二区| 亚洲欧美日韩精品久久久久| 国产精品一区二区在线观看不卡| aa级大片欧美| 久久精品国产精品亚洲| 在线观看一区视频| 欧美国产日产韩国视频| 亚洲免费电影在线观看| 亚洲欧美视频一区二区三区| 国产亚洲一区二区精品| 卡一卡二国产精品| 99精品欧美一区二区三区| 欧美一区二区三区喷汁尤物| 尤物在线观看一区| 欧美日韩一区二区三区| 欧美日本国产视频| 在线成人av网站| 亚洲黄色影片| 欧美电影电视剧在线观看| 欧美大片第1页| 亚洲网友自拍| 久久国产精品黑丝| 亚洲国产精品久久91精品| 亚洲精品日韩欧美| 国产女精品视频网站免费| 奶水喷射视频一区| 欧美日韩在线免费视频| 久久国产夜色精品鲁鲁99| 美女诱惑一区| 久久国产综合精品| 欧美刺激午夜性久久久久久久| 亚洲欧美偷拍卡通变态| 米奇777在线欧美播放| 亚洲欧美日韩中文视频| 久久久精品一品道一区| 正在播放日韩| 欧美激情在线观看| 女人色偷偷aa久久天堂| 国产精品久久久久久久app| 久久亚洲视频| 激情成人av在线| 欧美一区三区二区在线观看| 亚洲视频在线观看视频| 老色鬼精品视频在线观看播放| 亚洲精品麻豆| 久久裸体艺术| 小嫩嫩精品导航| 国产精品国产福利国产秒拍| 久久精品人人做人人综合| 国产精品每日更新| 亚洲人成在线播放| 亚洲国产成人不卡| 欧美在线91| 欧美亚洲三区| 国产精品久久国产精麻豆99网站| 亚洲区国产区| 亚洲精品国产日韩| 欧美国产亚洲精品久久久8v| 久久久99爱| 国产一区二区三区黄| 香蕉久久国产| 午夜国产一区| 欧美日韩中文字幕综合视频| 亚洲大胆av| 嫩草伊人久久精品少妇av杨幂| 欧美国产日韩在线| 日韩天堂在线视频| 国产精品海角社区在线观看| 一区二区三区视频在线观看 | 欧美一区二区视频在线观看2020 | 日韩一级大片在线| 亚洲影音一区| 国产亚洲成人一区| 免费观看久久久4p| 亚洲毛片在线观看| 久久久久国产精品一区二区| 亚洲韩国青草视频| 国产精品porn| 欧美成人亚洲成人日韩成人| 国产精品99久久不卡二区| 欧美一区二区三区在线| 亚洲国产欧美不卡在线观看| 欧美日韩国产综合视频在线| 午夜在线观看免费一区| 亚洲精品日韩欧美| 麻豆成人综合网| 亚洲一区二区三区免费观看| 伊人狠狠色丁香综合尤物| 欧美日韩国产三区| 欧美日韩国产精品一卡| 欧美日韩高清一区| 欧美日韩国产一级片| 欧美精品在线观看91| 国产精品人人做人人爽 | 亚洲乱码国产乱码精品精可以看| 136国产福利精品导航| 99精品视频一区| 午夜在线播放视频欧美| 一区二区激情| 亚洲桃花岛网站| 午夜精品久久久久久久蜜桃app| 亚洲午夜免费福利视频| 亚洲视频福利| 久久激情中文| 免费精品99久久国产综合精品| 久久另类ts人妖一区二区| 欧美粗暴jizz性欧美20| 欧美国产一区二区在线观看| 亚洲第一二三四五区| 国内精品免费在线观看| 国产精品久久久久影院色老大 | 亚洲精品综合在线| 亚洲免费在线观看视频| 嫩草国产精品入口| 亚洲已满18点击进入久久| 久久精品一二三| 91久久综合亚洲鲁鲁五月天| 亚洲欧美日韩一区| 欧美日本三区| 亚洲精品专区| 亚洲国产经典视频| 久久综合久久久久88| 精品69视频一区二区三区|