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

雁過無痕

  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 閱讀(4771) 評論(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>
            一区二区三区免费在线观看| 亚洲欧美三级伦理| 久久婷婷成人综合色| 香蕉免费一区二区三区在线观看| 国产精品久久久久久福利一牛影视| 99精品久久久| 99精品视频免费全部在线| 欧美性猛交xxxx乱大交蜜桃| 亚洲已满18点击进入久久| 亚洲专区欧美专区| 国产专区一区| 亚洲国产成人91精品| 欧美日韩精品久久| 性久久久久久久| 久久久综合网站| 99精品欧美一区二区三区| 亚洲天堂成人在线视频| 国内精品久久久久久影视8| 欧美国产日韩一区二区| 欧美日韩亚洲一区二区| 久久精品日韩欧美| 蘑菇福利视频一区播放| 亚洲欧美日韩精品久久亚洲区 | 久久久久久亚洲综合影院红桃| 久久久国产视频91| 一本色道久久综合狠狠躁篇怎么玩 | 99re国产精品| 亚洲男人影院| 亚洲精品偷拍| 亚洲综合不卡| 日韩视频不卡中文| 香蕉久久夜色| 一本色道久久综合狠狠躁篇怎么玩| 亚洲香蕉网站| 亚洲美女黄网| 久久国产视频网站| 在线综合亚洲欧美在线视频| 欧美在线综合| 亚洲欧美日韩一区| 欧美电影免费观看大全| 久久精品论坛| 国产精品区一区二区三区| 亚洲承认在线| 欧美在线视频一区| 免费成人黄色| 久久久久国产精品厨房| 欧美视频网址| 亚洲黄一区二区| 一区二区亚洲欧洲国产日韩| 亚洲午夜精品久久| 亚洲乱码一区二区| 久久综合伊人77777| 久久久在线视频| 国产日韩专区| 午夜精品久久久久久久99水蜜桃 | 欧美亚一区二区| 亚洲二区在线| 在线观看日韩一区| 久久久精品欧美丰满| 欧美在线观看视频在线| 国产精品毛片| 亚洲午夜激情在线| 亚洲一区亚洲二区| 欧美日韩中文字幕综合视频| 亚洲三级视频在线观看| 亚洲精选视频在线| 欧美激情精品久久久久久| 欧美激情亚洲自拍| 亚洲精品美女久久7777777| 另类亚洲自拍| 亚洲激情av在线| 在线视频欧美日韩精品| 欧美图区在线视频| 亚洲图片欧美一区| 久久精品国产第一区二区三区| 国产区日韩欧美| 久久精品五月| 亚洲国产精品va在线看黑人| 亚洲开发第一视频在线播放| 欧美理论片在线观看| 亚洲视频一起| 久久精品男女| 亚洲高清久久久| 欧美人成在线视频| 国产精品99久久久久久久女警 | 欧美在线一级va免费观看| 国产精品视频yy9099| 欧美一区二区日韩一区二区| 乱人伦精品视频在线观看| 在线观看视频亚洲| 欧美日韩美女一区二区| 亚洲永久免费| 免费亚洲一区| 亚洲一级二级在线| 国产一区在线播放| 欧美精品99| 香蕉久久夜色精品| 欧美黄色大片网站| 午夜精品一区二区三区在线播放 | 麻豆成人精品| 一区二区三区国产精品| 久久精品一区二区三区不卡| 亚洲福利电影| 国产精品美女久久久| 久久综合九色九九| 宅男66日本亚洲欧美视频| 老司机精品视频一区二区三区| 99精品99| 在线欧美不卡| 国产精品区一区| 欧美成人亚洲成人| 欧美一区二区三区视频免费播放 | 亚洲一区精品视频| 在线成人av网站| 国产精品久久久久7777婷婷| 久久这里有精品视频| 一本色道88久久加勒比精品| 免费亚洲电影| 欧美在线三区| 亚洲一区二区免费看| 亚洲精品韩国| 一色屋精品视频在线观看网站| 国产精品久久久久久模特| 欧美高清hd18日本| 久久久久久网站| 性欧美暴力猛交69hd| 一区二区高清| 日韩视频一区二区在线观看| 欧美电影免费观看网站| 久久久噜噜噜| 久久大逼视频| 欧美一级片久久久久久久| 中日韩高清电影网| 日韩视频免费看| 亚洲看片网站| 亚洲精品社区| 亚洲久久视频| 亚洲精品极品| 亚洲精选一区| 一区二区三区回区在观看免费视频| 亚洲大片一区二区三区| 一区二区亚洲精品| 红桃av永久久久| 激情综合激情| 亚洲大胆人体视频| 亚洲国产欧美国产综合一区| 亚洲高清网站| 亚洲精品久久久久久久久| 亚洲三级电影在线观看 | 国产日韩欧美综合精品| 国产精品毛片va一区二区三区| 国产精品r级在线| 国产精品久久久久久五月尺| 国产精品国产三级国产aⅴ浪潮| 欧美视频日韩| 国产精品国产三级国产普通话三级| 国产精品激情电影| 国产亚洲欧美中文| 一区二区亚洲精品| 亚洲精品久久久一区二区三区| 亚洲人成亚洲人成在线观看| 99视频热这里只有精品免费| 亚洲一区在线观看视频| 欧美一区二区日韩一区二区| 久久免费高清| 亚洲经典一区| 亚洲男女自偷自拍图片另类| 欧美一区二区三区视频在线观看| 久久精品国产成人| 欧美激情一区二区三区高清视频| 国产精品成人播放| 狠狠88综合久久久久综合网| 亚洲人午夜精品| 性欧美18~19sex高清播放| 老鸭窝亚洲一区二区三区| 亚洲国产日日夜夜| 亚洲在线视频观看| 狼人社综合社区| 国产精品久久久久久久久久ktv| 国模一区二区三区| 99精品视频一区| 久久精品国产欧美亚洲人人爽| 欧美激情视频网站| 亚洲一区久久| 免费日韩成人| 国产一区99| 亚洲香蕉视频| 欧美激情一区三区| 欧美在线视频不卡| 欧美日韩高清在线| 在线观看免费视频综合| 亚洲免费一区二区| 亚洲高清av在线| 久久精品免视看| 国产精品丝袜xxxxxxx| 日韩视频免费在线观看| 另类成人小视频在线| 亚洲一级影院| 欧美日韩亚洲综合一区| 精品成人一区二区三区|