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

雁過無痕

  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>
            亚洲成色www8888| 美国成人直播| 精品二区视频| 91久久精品日日躁夜夜躁欧美| 国产精品一区久久久| 欧美大片在线看免费观看| 国产精品wwwwww| 亚洲精品久久久久久一区二区| 国产精品乱码| 亚洲第一精品久久忘忧草社区| 国产综合av| 一区二区三区久久精品| 亚洲三级影院| 久久久精品欧美丰满| 亚洲网站在线| 久久九九免费视频| 性做久久久久久久免费看| 免费看黄裸体一级大秀欧美| 久久精品人人做人人综合| 国产精品久久久久久久久久直播 | 亚洲大片av| 欧美在线一二三| 亚洲欧美日韩国产中文在线| 欧美国产精品专区| 亚洲福利视频一区| 亚洲第一福利社区| 久久青草福利网站| 久久天天躁夜夜躁狠狠躁2022 | 国产精品国产三级国产aⅴ入口| 欧美成va人片在线观看| 国产欧美日韩不卡| 欧美亚洲网站| 欧美在线免费视频| 欧美日韩精品综合| 中国成人在线视频| 洋洋av久久久久久久一区| 欧美日韩福利| 亚洲激情第一区| 亚洲日产国产精品| 欧美日本高清视频| 亚洲日本在线观看| 亚洲免费在线视频| 欧美日韩高清在线| 亚洲精品一区二区在线| 亚洲欧美日本国产有色| 国产精品久久久久9999吃药| 亚洲九九精品| 久久精品毛片| 韩国精品久久久999| 久久深夜福利| 欧美激情无毛| 洋洋av久久久久久久一区| 欧美日韩成人一区| 一区二区三区 在线观看视| 亚洲综合色丁香婷婷六月图片| 国产精品爱啪在线线免费观看| 在线一区免费观看| 久久久成人精品| 亚洲精品视频在线播放| 欧美日韩国产精品自在自线| 亚洲欧美日韩另类| 美女免费视频一区| 日韩视频不卡中文| 国产一区二区成人久久免费影院| 欧美一区二区三区视频在线观看| 欧美电影免费观看高清完整版| 亚洲乱码国产乱码精品精 | 美女尤物久久精品| 亚洲三级网站| 亚洲一区欧美二区| 在线播放不卡| 欧美母乳在线| 快播亚洲色图| av成人免费在线| 午夜亚洲影视| 亚洲美洲欧洲综合国产一区| 欧美午夜视频| 欧美激情综合色| 亚洲一区网站| 久久一区精品| 久久av一区二区三区亚洲| 亚洲成人资源| 韩国美女久久| 欧美日韩一卡| 久久久久久久网站| 一区二区免费在线观看| 美女主播精品视频一二三四| 欧美在线啊v| 日韩视频在线播放| 亚洲国产精品成人精品| 国产精品拍天天在线| 欧美成人69av| 玖玖综合伊人| 午夜宅男久久久| 亚洲天堂久久| 亚洲免费观看| 欧美大片在线看| 欧美成人午夜激情在线| 性色av一区二区三区红粉影视| 一区二区高清在线| 激情文学综合丁香| 国产精品一区视频| 国产精品久久久久久久电影| 免费视频一区二区三区在线观看| 久久精品欧洲| 亚洲欧美综合网| 亚洲国产视频一区| 亚洲国产日韩欧美在线99| 久久久久久久久久久久久久一区| 久久福利精品| 午夜精品亚洲| 亚洲神马久久| 亚洲一区不卡| 亚洲视频二区| 亚洲综合二区| 亚洲淫性视频| 欧美一级二区| 欧美在线观看视频| 亚洲免费视频一区二区| 午夜日韩在线观看| 亚洲综合首页| 久久精品99国产精品日本 | 国产欧美日韩综合一区在线观看| 国产欧美韩国高清| 国产精品视频免费一区| 国产麻豆精品视频| 国产精品一区二区三区观看| 欧美日韩精品一区二区| 欧美性色aⅴ视频一区日韩精品| 欧美日韩精品一区二区天天拍小说 | 日韩午夜精品| 日韩亚洲欧美一区二区三区| 亚洲一区二区av电影| 亚洲一区二区三区四区五区午夜 | 亚洲人成7777| 亚洲区国产区| 一区二区三区欧美在线观看| 性亚洲最疯狂xxxx高清| 久久成人免费| 亚洲国产精品精华液2区45| 亚洲经典在线看| 亚洲精品在线看| 小辣椒精品导航| 久久三级视频| 国产精品国产三级国产普通话蜜臀| 国产精品久线观看视频| 在线观看免费视频综合| 99视频精品免费观看| 久久av资源网站| 欧美激情视频免费观看| 亚洲看片一区| 久久亚洲美女| 欧美久久影院| 在线成人中文字幕| 99在线精品视频| 老司机免费视频久久| 亚洲国产三级在线| 亚洲国产天堂久久国产91| 欧美一区网站| 欧美精品在线观看| 在线不卡中文字幕| 亚洲一区二区3| 亚洲高清免费视频| 午夜精品福利在线| 欧美国产日产韩国视频| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲人成小说网站色在线 | 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲精品少妇30p| 欧美一区二区三区视频免费| 欧美性一区二区| 亚洲国产成人不卡| 久久久久久穴| 99re6热只有精品免费观看| 久久激情网站| 欧美日韩综合精品| 国产一级一区二区| 一区二区三区三区在线| 蜜桃精品久久久久久久免费影院| 日韩午夜av电影| 免费在线日韩av| 亚洲国产精品va在看黑人| 欧美在线免费| 午夜精品免费| 国产精品magnet| 亚洲性感激情| 亚洲福利小视频| 免费的成人av| 在线欧美日韩精品| 久久激情婷婷| 欧美专区第一页| 国产精品一区二区欧美| 欧美一级午夜免费电影| av成人免费在线观看| 欧美日韩福利在线观看| 亚洲人成在线观看| 久久精品免视看| 久久综合激情| 亚洲小说欧美另类社区| 欧美性一二三区|