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

雁過無痕

  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é)果根本不準。

用矩陣來計算,雖然時間復雜度降到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次。可以用一個棧保存要計算的數(shù),實際上,將n的最高位1(假設在第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 閱讀(4771) 評論(11)  編輯 收藏 引用 所屬分類: 算法編程之美

評論

# re: O(log n)求Fibonacci數(shù)列(非矩陣法)[未登錄] 2010-07-16 11:18 Klion
你好,這篇文章下面這段文字“實際上,將n的最高位1(假設在第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)怎么算的  回復  更多評論
  

# 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.   回復  更多評論
  

# 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

  回復  更多評論
  

# 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é)果是算出來的這兩個中的小者。  回復  更多評論
  

# 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)用那兩個公式,出棧。
反復至棧為空。



  回復  更多評論
  

# 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).
  回復  更多評論
  

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

# 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) 應該是 F(n+1) = F(n) + F(n-1)
不過后面的公式推導沒問題。

  回復  更多評論
  

# 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)),可能是乘法的緣故  回復  更多評論
  

# 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/
歡迎拍磚  回復  更多評論
  

# 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/  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久aⅴ国产紧身牛仔裤| 欧美成人精品高清在线播放| 久久精品视频一| 国产亚洲激情视频在线| 久久精品最新地址| 欧美福利在线| 日韩视频国产视频| 国产精品裸体一区二区三区| 亚洲欧美激情在线视频| 久久免费视频在线观看| 最新国产の精品合集bt伙计| 欧美日韩亚洲高清| 亚洲伊人观看| 男男成人高潮片免费网站| 最新国产の精品合集bt伙计| 欧美日韩国产经典色站一区二区三区| 久久成人综合网| 女人色偷偷aa久久天堂| 亚洲综合色自拍一区| 亚洲小说区图片区| 久久久天天操| 欧美理论在线播放| 黄网动漫久久久| 亚洲午夜精品国产| 榴莲视频成人在线观看| 亚洲精品专区| 国产欧美激情| 久久久亚洲一区| 99国产精品视频免费观看| 国产农村妇女毛片精品久久麻豆 | 亚洲综合视频1区| 国内精品久久久久国产盗摄免费观看完整版| 免费观看在线综合色| 亚洲一本大道在线| 亚洲欧洲日产国产综合网| 欧美自拍丝袜亚洲| 这里只有视频精品| 亚洲电影自拍| 国产一区在线播放| 国产精品久久网| 欧美日韩国产精品一区| 久久久视频精品| 午夜精品视频网站| 亚洲午夜精品久久久久久浪潮 | 亚洲视频电影在线| 亚洲电影网站| 国产综合香蕉五月婷在线| 欧美视频不卡| 欧美日本亚洲视频| 欧美国产一区二区在线观看| 久久久久久久综合狠狠综合| 亚洲欧美不卡| 一区二区三区日韩在线观看| 亚洲黄一区二区| 亚洲盗摄视频| 欧美va天堂va视频va在线| 久久久久国产精品www| 欧美中日韩免费视频| 亚洲图片欧美一区| 这里只有精品视频在线| 亚洲美女中出| 亚洲美女在线国产| 亚洲巨乳在线| 91久久在线视频| 91久久国产综合久久| 亚洲大胆人体在线| 影音先锋国产精品| 亚洲欧美国产制服动漫| 国产精品大片免费观看| 欧美一区免费视频| 久久在线免费视频| 亚洲一区国产一区| 久久久青草婷婷精品综合日韩| 亚洲国内自拍| 在线中文字幕日韩| 亚洲电影一级黄| 亚欧成人精品| 欧美一区二区三区四区在线| 久久免费视频在线观看| 久久久久久久久蜜桃| 一区二区91| 久久国产欧美| 亚洲片区在线| 欧美日韩精品综合| 夜夜嗨av一区二区三区中文字幕| 国产婷婷色一区二区三区在线| 欧美夫妇交换俱乐部在线观看| 久久av一区| 99热在线精品观看| 亚洲精品欧美精品| 夜夜嗨av一区二区三区网站四季av| 日韩视频不卡中文| 一区二区欧美精品| 西西裸体人体做爰大胆久久久| 亚洲欧美日韩系列| 欧美中文字幕视频在线观看| 可以看av的网站久久看| 欧美激情精品| 99在线精品视频| 亚洲欧美精品伊人久久| 久久成人免费电影| 欧美国产日韩在线| 国产精品久久久久久久久久免费 | 亚洲综合色自拍一区| 午夜久久福利| 久热精品视频在线免费观看| 欧美激情区在线播放| 日韩午夜免费| 欧美一区二视频| 欧美gay视频激情| 欧美日韩一区二区三区在线视频| 国产精品美女久久久免费| 激情欧美一区二区三区在线观看| 亚洲国内高清视频| 亚洲自拍偷拍一区| 男女精品视频| 亚洲在线观看| 欧美高清视频一区二区| 国产精品一区二区三区免费观看| 在线精品一区二区| 亚洲欧美激情视频| 亚洲大片精品永久免费| 亚洲视频在线一区观看| 久久综合网hezyo| 欧美午夜一区二区| 亚洲国产成人porn| 午夜精品久久久久久久| 亚洲国产欧美久久| 久久精品一二三区| 国产精品久久久久久久浪潮网站 | 在线综合欧美| 国产一区日韩一区| 狠狠干狠狠久久| 一区二区三区**美女毛片 | 亚洲精品国久久99热| 亚洲午夜一区二区三区| 一区二区三区在线观看欧美| 欧美黄色免费| 欧美一区三区二区在线观看| 99在线精品视频| 欧美福利电影网| 欧美激情五月| 国产午夜精品在线| 野花国产精品入口| 欧美大胆a视频| 亚洲欧美日韩一区二区三区在线观看| 欧美激情亚洲另类| 在线看无码的免费网站| 欧美一区二区日韩| 亚洲在线播放| 国产精品qvod| 亚洲一区二区视频在线| 亚洲人成7777| 欧美大片在线观看一区二区| 国语自产精品视频在线看8查询8| 欧美一区二区三区视频在线观看 | 国产精品v日韩精品| 亚洲美女毛片| 欧美激情乱人伦| 久久综合九色| 亚洲国产一二三| 欧美国产三级| 麻豆精品一区二区av白丝在线| 激情久久久久久| 免费观看久久久4p| 巨胸喷奶水www久久久免费动漫| 好吊视频一区二区三区四区| 久久久天天操| 久久偷窥视频| 亚洲人在线视频| 亚洲欧洲日韩女同| 欧美另类女人| 亚洲欧美日韩在线一区| 亚洲午夜激情| 国产一区久久| 久久免费99精品久久久久久| 久久久免费精品视频| 亚洲缚视频在线观看| 欧美激情国产日韩| 欧美日韩一区在线观看| 亚洲欧美日韩国产综合| 欧美亚洲综合网| 伊人伊人伊人久久| 亚洲国产一区二区精品专区| 欧美理论电影在线观看| 午夜精品久久久久久久99黑人| 小处雏高清一区二区三区| 伊伊综合在线| 亚洲三级免费| 国产免费观看久久黄| 久久综合图片| 欧美日韩成人在线观看| 欧美一二区视频| 久久在线免费视频| 亚洲午夜精品在线| 久久狠狠一本精品综合网| 亚洲精品乱码久久久久久按摩观 | 欧美在线视频在线播放完整版免费观看 | 亚洲美女一区| 狠狠色2019综合网|