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

雁過無痕

  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 閱讀(4755) 評論(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>
            欧美成人四级电影| 欧美激情在线免费观看| 亚洲丝袜av一区| 国产精品亚洲综合色区韩国| 亚洲午夜国产成人av电影男同| 中国成人在线视频| 国产色婷婷国产综合在线理论片a| 欧美在线视频一区二区三区| 久久狠狠亚洲综合| 日韩视频免费观看高清在线视频 | 欧美日韩国产综合久久| 中文在线一区| 久久国产福利| 亚洲三级免费观看| 亚洲午夜一区二区| 精品动漫3d一区二区三区免费| 亚洲第一黄色网| 欧美午夜一区二区| 蜜桃av噜噜一区二区三区| 欧美韩日高清| 久久精品五月婷婷| 欧美精品入口| 久久伊人免费视频| 欧美日韩国产系列| 久久影院亚洲| 国产精品久久久久9999| 猛干欧美女孩| 国产精品一区二区久久| 欧美激情一区二区三区在线视频 | 久久久久一区| 亚洲自拍偷拍视频| 欧美va天堂| 欧美一级视频| 欧美日韩一区三区四区| 美女诱惑黄网站一区| 欧美亚男人的天堂| 亚洲大胆人体视频| 国产日韩欧美在线视频观看| 最近中文字幕日韩精品| 亚洲日本理论电影| 免费在线成人av| 久久久高清一区二区三区| 欧美黑人一区二区三区| 久久综合色一综合色88| 欧美无砖砖区免费| 亚洲精美视频| 亚洲高清av| 久久精品1区| 欧美一区二区三区日韩| 欧美日韩在线一区二区| 欧美激情国产精品| 悠悠资源网亚洲青| 午夜一区二区三区不卡视频| 一本色道久久综合狠狠躁的推荐| 久久一区二区三区超碰国产精品| 欧美在线免费视频| 国产精品卡一卡二| 亚洲视频在线二区| 亚洲一区日韩| 欧美午夜精品一区二区三区| 亚洲精品孕妇| 一区二区精品国产| 欧美伦理a级免费电影| 欧美韩日一区二区三区| 在线看片一区| 免费成人美女女| 欧美激情国产日韩精品一区18| 在线看一区二区| 久久偷看各类wc女厕嘘嘘偷窃| 久久婷婷成人综合色| 欲香欲色天天天综合和网| 欧美主播一区二区三区| 久久综合九色综合欧美就去吻| 国产亚洲a∨片在线观看| 久久国产精品电影| 免费不卡亚洲欧美| 亚洲激情视频在线播放| 欧美成人日韩| 亚洲蜜桃精久久久久久久| 亚洲午夜一区| 国产伦精品一区二区三区免费迷 | 欧美在线视频一区二区| 久久亚洲色图| 亚洲黄色有码视频| 欧美日韩免费一区二区三区视频| 亚洲精品韩国| 性欧美1819sex性高清| 国产一区二区三区四区三区四| 久久精品国产亚洲高清剧情介绍| 欧美成人激情在线| 一本久道久久综合中文字幕| 国产精品久久影院| 久久久999成人| 亚洲国产成人porn| 亚洲砖区区免费| 伊人成人在线| 欧美日韩一区二区在线播放| 翔田千里一区二区| 亚洲国产成人精品久久久国产成人一区| 亚洲婷婷在线| 黑人一区二区三区四区五区| 欧美成人激情在线| 亚洲欧美999| 欧美激情综合色| 欧美一级欧美一级在线播放| 亚洲国产精品热久久| 欧美成人亚洲| 亚洲精品乱码久久久久久蜜桃91| 欧美体内谢she精2性欧美| 欧美一区二区三区在| 亚洲欧洲一区二区在线观看| 久久成人精品| 亚洲深爱激情| 亚洲区一区二| 韩日成人在线| 欧美亚男人的天堂| 欧美a级片网| 久久精品夜色噜噜亚洲a∨| 宅男噜噜噜66国产日韩在线观看| 欧美第一黄网免费网站| 欧美在线影院在线视频| 99精品欧美一区二区三区| 精品91在线| 国产精品中文字幕在线观看| 欧美日韩另类在线| 欧美大片免费久久精品三p| 久久大逼视频| 午夜欧美电影在线观看| 亚洲一级二级| 中文欧美字幕免费| 亚洲美女在线一区| 亚洲国产精品一区制服丝袜 | 亚洲午夜av电影| 亚洲免费高清| 亚洲欧洲一区二区三区在线观看| 国产亚洲福利社区一区| 国产精品第13页| 欧美三级网址| 国产精品www.| 国产精品美女久久久| 国产精品免费网站| 国产精品视频| 国产亚洲成年网址在线观看| 国产精品一香蕉国产线看观看| 欧美三级视频| 国产精品中文字幕欧美| 国产欧美一区二区色老头| 国产精品免费小视频| 国产精品揄拍500视频| 国产婷婷97碰碰久久人人蜜臀| 国产美女搞久久| 国产一区二区三区久久悠悠色av| 国产欧美日韩亚洲精品| 国产网站欧美日韩免费精品在线观看 | 精品1区2区| 亚洲高清久久| 99国产精品视频免费观看| 夜夜嗨av色综合久久久综合网| 日韩视频在线你懂得| 一区二区欧美精品| 亚洲欧美综合一区| 久久国产精品一区二区三区四区| 欧美在线视频导航| 久久午夜电影| 亚洲精品无人区| 亚洲综合日韩| 久久久无码精品亚洲日韩按摩| 麻豆精品视频| 欧美日韩亚洲一区二| 国产欧美一区二区精品婷婷| 激情综合视频| 一本大道久久a久久精二百| 亚洲一区二区成人| 久久精品水蜜桃av综合天堂| 欧美激情在线观看| 亚洲一级高清| 校园春色国产精品| 亚洲欧洲精品一区二区精品久久久| 裸体一区二区三区| 亚洲韩国精品一区| 亚洲欧美日韩视频二区| 久久久亚洲综合| 国产精品海角社区在线观看| 激情小说亚洲一区| 亚洲午夜视频在线观看| 蜜桃精品久久久久久久免费影院| 亚洲精品久久久久久久久| 性久久久久久久| 欧美日韩 国产精品| 狠狠色综合播放一区二区| 一本久久综合亚洲鲁鲁| 久久一区二区精品| 99视频日韩| 蜜臀av一级做a爰片久久| 国产精品亚洲一区二区三区在线| 亚洲区国产区| 嫩草成人www欧美| 校园春色国产精品| 国产精品免费看久久久香蕉| 日韩视频精品|