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

雁過無痕

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

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

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

用矩陣來計算,雖然時間復(fù)雜度降到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),時間復(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ù)
    注意,當 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是負數(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
你好,這篇文章下面這段文字“實際上,將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為例其二進制表示(最左邊的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>
            亚洲欧洲日韩女同| 国内揄拍国内精品久久| 欧美日韩国产在线| 国产一区二区精品久久99| 中日韩视频在线观看| 免费国产自线拍一欧美视频| 校园激情久久| 最新日韩在线视频| 99www免费人成精品| 另类成人小视频在线| 性欧美办公室18xxxxhd| 国产精品一区二区三区久久久| 一区二区高清视频在线观看| 亚洲日本视频| 欧美精品尤物在线| 亚洲私人影院| 一区二区免费看| 国产精品久久久久9999| 亚洲影视中文字幕| 亚洲视频在线一区| 国产日韩一级二级三级| 久久久噜噜噜久久人人看| 久久九九99| 91久久国产综合久久蜜月精品 | 亚洲人成77777在线观看网| 免费在线国产精品| 日韩视频免费在线| 亚洲深爱激情| 国语自产在线不卡| 欧美激情亚洲自拍| 欧美日韩一区二区三区| 欧美亚洲一区| 久久亚洲一区| 中文国产成人精品| 欧美一区二区在线免费播放| 亚洲成人在线观看视频| 99精品国产福利在线观看免费 | 国产精品超碰97尤物18| 毛片一区二区| 亚洲深夜福利视频| 欧美一区日韩一区| 亚洲精品中文字幕在线观看| 亚洲视频免费观看| 一区二区三区中文在线观看| 亚洲国产精品久久久久| 国产精品―色哟哟| 欧美激情亚洲一区| 国产欧美日韩综合一区在线观看 | 欧美精品99| 久久九九免费| 欧美日本国产精品| 久久网站免费| 欧美日韩在线高清| 欧美aⅴ99久久黑人专区| 欧美日韩亚洲网| 免费的成人av| 国产精品一区一区三区| 亚洲福利视频免费观看| 国产婷婷色一区二区三区四区| 亚洲国产精品第一区二区| 国产欧美日韩视频一区二区三区 | 国产精品爽黄69| 亚洲国产精品成人| 国产一区二区三区精品欧美日韩一区二区三区 | 久久精品欧美日韩| 久久精品亚洲精品| 亚洲综合二区| 欧美国产日韩一二三区| 久久综合给合| 国产精品一区二区久久| 亚洲精品视频二区| 最新国产の精品合集bt伙计| 欧美一区二区三区视频免费| 亚洲女女女同性video| 欧美激情精品久久久久久久变态| 久久久久久夜精品精品免费| 欧美午夜精品理论片a级大开眼界| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美一区影院| 一本在线高清不卡dvd| 麻豆成人在线观看| 麻豆精品视频在线| 影音先锋久久久| 久久精精品视频| 久久久久综合一区二区三区| 国产一区二区三区久久悠悠色av | 国产亚洲精品久久飘花| 午夜在线一区二区| 国产精品黄视频| 一区二区黄色| 亚洲欧美日韩直播| 国产精品永久免费在线| 亚洲无亚洲人成网站77777| 在线一区二区视频| 国产精品www网站| 一区二区三区欧美| 亚洲欧美国产视频| 国产啪精品视频| 欧美中文字幕| 狼人天天伊人久久| 亚洲电影免费| 欧美不卡一区| 日韩一区二区免费高清| 亚洲欧美日韩国产综合在线| 国产欧美不卡| 久久综合久久久| 亚洲清纯自拍| 亚洲欧美综合v| 国产一区二区三区四区hd| 欧美自拍偷拍午夜视频| 欧美国产精品v| 亚洲午夜av在线| 国产日韩欧美一区| 久久夜色精品亚洲噜噜国产mv| 亚洲大胆在线| 亚洲欧美日韩久久精品| 国模精品娜娜一二三区| 欧美激情久久久| 午夜国产精品影院在线观看| 久久一本综合频道| 9色porny自拍视频一区二区| 国产精品美女久久久久久2018| 久久激情综合| 日韩一区二区电影网| 久久久久久69| 一区二区三区四区精品| 国产在线视频不卡二| 欧美华人在线视频| 欧美影片第一页| 亚洲美女黄色| 另类天堂av| 亚洲欧美激情诱惑| 亚洲国产综合在线| 国产欧美一区二区三区国产幕精品| 久久天天躁狠狠躁夜夜av| 国产精品99久久久久久久久久久久 | 国产精品99久久99久久久二8 | 国产日韩欧美在线| 欧美阿v一级看视频| 亚洲一区二三| 亚洲人成人一区二区三区| 久久久久久久成人| 亚洲一区视频在线| 亚洲欧洲精品天堂一级| 国产一区二区三区av电影| 欧美视频一区二区三区| 久久综合中文字幕| 欧美一区二区网站| 亚洲网在线观看| 亚洲精品乱码久久久久久按摩观 | 午夜一级久久| 亚洲视频一二区| 亚洲国产精品久久久久婷婷老年| 欧美亚洲成人精品| 欧美高清视频在线| 久久久亚洲一区| 欧美一区二区视频在线观看| 一区二区三区高清视频在线观看| 欧美激情影院| 欧美成人国产| 美日韩丰满少妇在线观看| 久久国产精品黑丝| 欧美一级久久久久久久大片| 亚洲一区不卡| 亚洲少妇在线| 妖精视频成人观看www| 亚洲人被黑人高潮完整版| 亚洲第一精品夜夜躁人人爽| 狠狠入ady亚洲精品经典电影| 国产美女诱惑一区二区| 国产精品视区| 国产日韩欧美一二三区| 国产一区观看| 黑人一区二区| 亚洲成人在线免费| 亚洲国产美女精品久久久久∴| 在线观看日韩www视频免费| 狠狠色丁香婷婷综合影院 | 亚洲盗摄视频| 亚洲国产清纯| 99ri日韩精品视频| 中文欧美日韩| 亚洲欧美成人| 久久爱另类一区二区小说| 久久精品五月| 欧美成人自拍视频| 欧美日韩视频一区二区三区| 欧美日韩在线不卡| 国产欧美一二三区| 黄色在线一区| 亚洲另类在线视频| 一本色道久久综合亚洲精品高清| 99伊人成综合| 亚洲欧美综合网| 久久久午夜精品| 亚洲电影在线观看| 在线视频一区观看| 欧美一区在线直播| 欧美精品xxxxbbbb| 国产精品亚洲成人|