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

雁過無痕

  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 閱讀(4765) 評論(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>
            欧美日韩一区二区精品| 黄色在线一区| 亚洲欧美日韩国产综合精品二区| 欧美激情视频免费观看| 久久偷看各类wc女厕嘘嘘偷窃| 久久久精品一品道一区| 久久人人爽人人| 欧美a级理论片| 亚洲国产日韩欧美在线99| 久久久午夜视频| 久久久人成影片一区二区三区观看| 久久久久国产免费免费| 久久综合精品一区| 欧美国产成人在线| 日韩视频精品在线观看| 亚洲欧美国产精品桃花| 久久精品成人| 欧美成人一品| 国产精品午夜av在线| 亚洲电影自拍| 亚洲视频精品在线| 香蕉成人久久| 牛牛国产精品| 亚洲午夜久久久| 久久这里只有| 国产精品久久久久影院亚瑟 | 国产精品免费一区二区三区在线观看| 久久字幕精品一区| 亚洲欧洲三级电影| 国产精品成人久久久久| 狠狠爱综合网| 久久精品中文字幕免费mv| 亚洲欧美日韩中文视频| 久久se精品一区二区| 欧美不卡视频一区| 精品电影在线观看| 国模套图日韩精品一区二区| 亚洲电影在线观看| 亚洲电影免费观看高清完整版在线观看| 国产欧美日韩三级| 你懂的一区二区| 欧美亚洲一区二区在线观看| 国语对白精品一区二区| 免播放器亚洲| 国产精品久久久久久久免费软件 | 久久九九热re6这里有精品| 99www免费人成精品| 欧美区视频在线观看| 久久国产精品亚洲77777| 久久九九全国免费精品观看| av72成人在线| 一区三区视频| 国产精品区一区二区三| 亚洲一级二级| 亚洲精品一区在线观看| 一区二区亚洲精品国产| 亚洲午夜在线观看| 激情成人亚洲| 欧美一级片在线播放| 欧美激情亚洲精品| 欧美成人午夜77777| 欧美伊人久久| 99精品视频免费观看视频| 欧美激情视频给我| 欧美国产日本在线| 亚洲一区二区成人在线观看| 久久久精品国产99久久精品芒果| 一区二区三区国产在线观看| 久久精品国产欧美亚洲人人爽| 欧美韩日视频| 午夜精品久久一牛影视| 欧美日韩日本视频| 欧美日韩国产123| 亚洲人成人一区二区三区| 国产日韩欧美精品在线| 在线免费观看成人网| 亚洲黄色在线| 久久国内精品视频| 亚洲精品久久久久中文字幕欢迎你| 一本一道久久综合狠狠老精东影业 | 国产精品一区免费在线观看| 老司机午夜精品视频在线观看| 玖玖精品视频| 欧美电影免费观看| 亚洲一区二区在线视频| 久久精品人人| 亚洲精品美女在线观看| 理论片一区二区在线| 亚洲精品久久久久久久久久久久久| 欧美电影在线| 欧美日韩亚洲综合在线| 亚洲女人av| 久久av一区二区| 精品动漫3d一区二区三区免费| 亚洲大胆人体视频| 欧美日本一道本| 久久精品亚洲热| 欧美xart系列高清| 校园激情久久| 久久精品一区二区三区四区| 91久久久久久久久| 一区二区三区鲁丝不卡| 亚洲伊人一本大道中文字幕| 欧美日韩一区二区视频在线| 性8sex亚洲区入口| 久久久国产精品一区二区中文| 1024成人网色www| 一区二区三区日韩欧美| 狠狠色狠色综合曰曰| 日韩小视频在线观看专区| 国内一区二区三区| 这里是久久伊人| 在线成人av.com| 亚洲午夜成aⅴ人片| 亚洲第一精品久久忘忧草社区| 一本色道久久综合亚洲精品不| 在线不卡亚洲| 欧美在线影院| 亚洲一二三区精品| 久久一本综合频道| 久久精品久久综合| 欧美日韩国产欧美日美国产精品| 久久精品视频va| 欧美日在线观看| 亚洲国产小视频| 亚洲国产成人av| 久久精品综合网| 欧美在线在线| 国产精品久久久久久久app| 欧美国产日韩一区| 伊人精品久久久久7777| 欧美在线免费| 欧美一区二区精品| 国产精品成人一区二区三区吃奶| 亚洲国产成人久久综合| 亚洲大片一区二区三区| 欧美在线视频免费播放| 亚洲欧美日韩电影| 亚洲欧美精品在线| 国产精品二区影院| 亚洲一区激情| 狠久久av成人天堂| 亚洲激情在线视频| 亚洲国产精品成人综合| 久久精品国产亚洲5555| 久久精品免费电影| 国产亚洲欧美另类中文| 欧美中文字幕第一页| 亚洲午夜久久久久久久久电影院 | 久久精品国内一区二区三区| 欧美在线精品免播放器视频| 国产精品一区在线播放| 久久se精品一区二区| 欧美成人网在线| 亚洲国产成人91精品| 欧美日韩久久久久久| 亚洲欧美成人综合| 免费成人性网站| 一本色道综合亚洲| 国产九区一区在线| 久久免费国产精品1| 亚洲国产成人一区| 日韩天天综合| 国产精品人成在线观看免费| 欧美一区二区视频观看视频| 欧美成年人网站| 一区二区三区鲁丝不卡| 国产欧美一区二区精品婷婷| 欧美一区二区三区免费大片| 老色鬼久久亚洲一区二区| 91久久久亚洲精品| 国产精品久久久久久久久久免费看 | 夜夜嗨av一区二区三区网页 | 在线观看视频亚洲| 欧美人交a欧美精品| 亚洲欧美国产一区二区三区| 欧美~级网站不卡| 亚洲一区二区免费在线| 激情久久五月天| 欧美日韩精品欧美日韩精品一| 香蕉国产精品偷在线观看不卡| 亚洲国产日韩一级| 久久久久女教师免费一区| 亚洲精品国产精品国产自| 国产精品最新自拍| 欧美美女操人视频| 久久久91精品国产| 亚洲视频一区二区| 亚洲国产精品福利| 久久精品理论片| 亚洲一区二区三区免费视频| 亚洲国产美女久久久久| 国产视频一区在线观看| 欧美午夜国产| 欧美电影在线播放| 午夜精品久久久久久久白皮肤 | 99re6热在线精品视频播放速度| 久久动漫亚洲| 在线亚洲观看| 99国产精品国产精品毛片|