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

雁過無痕

  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>
            欧美国产三级| 欧美日韩一区二区三区在线| 夜夜爽av福利精品导航| 欧美一区二区在线| 亚洲自拍另类| 欧美精品1区2区3区| 久久综合九色欧美综合狠狠| 欧美日韩中文字幕| 亚洲激情一区二区| 亚洲国产精品成人久久综合一区| 亚洲免费视频一区二区| 夜夜狂射影院欧美极品| 免费视频亚洲| 欧美高清你懂得| 极品少妇一区二区| 欧美在线视频一区二区三区| 亚洲欧美福利一区二区| 欧美日韩国产va另类| 欧美国产日韩视频| 亚洲激情影院| 欧美成人精品高清在线播放| 美国三级日本三级久久99| 国产视频在线一区二区| 午夜激情综合网| 欧美一区二粉嫩精品国产一线天| 欧美日韩国语| 99视频有精品| 亚洲欧美国产精品va在线观看| 欧美久久一区| 亚洲乱码国产乱码精品精可以看| 99这里有精品| 欧美日韩午夜| 亚洲午夜高清视频| 欧美一区二区大片| 国内精品视频久久| 久久综合国产精品| 亚洲国产99| 一区二区三区欧美在线| 欧美日韩免费高清| 亚洲专区一区二区三区| 久久成人精品电影| 影音先锋日韩有码| 你懂的亚洲视频| 亚洲精品国产无天堂网2021| 亚洲影音一区| 国产自产2019最新不卡| 久久久之久亚州精品露出| 欧美国产亚洲精品久久久8v| 一本色道久久99精品综合| 欧美日韩中文字幕在线| 午夜精品久久久久久久| 欧美不卡一区| 国产精品99久久久久久久女警 | 国产精品一区二区三区乱码| 午夜精品久久99蜜桃的功能介绍| 久久久福利视频| 亚洲欧洲另类国产综合| 欧美视频日韩视频在线观看| 亚洲一区二区动漫| 欧美freesex8一10精品| 亚洲小说欧美另类社区| 国内精品视频666| 欧美另类视频| 欧美影院在线| 日韩视频免费观看高清在线视频 | 欧美一区二区三区四区高清| 欧美成人国产va精品日本一级| 一本一道久久综合狠狠老精东影业| 国产精品毛片大码女人| 久久亚洲欧美| 亚洲免费视频成人| 亚洲日本aⅴ片在线观看香蕉| 欧美影院成年免费版| 亚洲人成在线观看一区二区| 国产麻豆日韩| 欧美日韩小视频| 久久亚洲电影| 欧美一区观看| 正在播放亚洲一区| 亚洲电影下载| 久久综合狠狠综合久久综青草| 亚洲一区二区在| 亚洲精品乱码久久久久久按摩观| 国产日韩精品综合网站| 欧美日韩一区二区三区| 女同性一区二区三区人了人一 | 欧美午夜视频网站| 久久综合精品一区| 久久国产精品一区二区三区四区| 99视频热这里只有精品免费| 亚洲高清中文字幕| 久久综合综合久久综合| 久久成人国产| 欧美亚洲在线| 亚洲综合精品一区二区| av成人福利| 亚洲精品一品区二品区三品区| 精品99一区二区| 国产亚洲成年网址在线观看| 国产精品久久亚洲7777| 欧美日韩免费高清一区色橹橹| 欧美福利电影在线观看| 老司机精品视频一区二区三区| 欧美一区二区在线播放| 亚洲欧美影音先锋| 性欧美1819sex性高清| 亚洲欧美日韩精品久久久| 亚洲无人区一区| 中日韩高清电影网| 亚洲天堂第二页| 亚洲午夜高清视频| 亚洲伊人网站| 欧美伊人久久久久久午夜久久久久| 亚洲一区二区三区成人在线视频精品| 一道本一区二区| 亚洲一区二区三区高清| 亚洲一区国产视频| 午夜精品国产更新| 欧美在线亚洲综合一区| 久久亚洲高清| 欧美91大片| 欧美日韩伦理在线| 国产精品视频内| 国产一区视频网站| 在线精品亚洲| aa亚洲婷婷| 亚洲欧美日韩视频二区| 久久久久久有精品国产| 欧美成人精品1314www| 亚洲精品欧美日韩| 亚洲影院污污.| 久久丁香综合五月国产三级网站| 久久精品欧美日韩精品| 免费不卡在线观看| 欧美视频网址| 国产亚洲一本大道中文在线| 在线精品视频免费观看| 夜夜夜精品看看| 欧美亚洲免费高清在线观看| 久久精品国产欧美亚洲人人爽| 美女图片一区二区| 亚洲人成网站777色婷婷| 亚洲天堂av电影| 老司机亚洲精品| 国产精品大全| 1769国产精品| 亚洲一级电影| 欧美aaa级| 亚洲午夜电影| 麻豆91精品91久久久的内涵| 欧美精品福利在线| 国产综合视频| 一本综合久久| 蜜桃av噜噜一区| 亚洲深夜福利网站| 免费成人黄色片| 国产精品一区二区三区四区五区| 亚洲国内高清视频| 欧美中文字幕不卡| 日韩视频在线一区二区| 久久精品欧美日韩| 国产精品久久夜| 亚洲九九爱视频| 久色婷婷小香蕉久久| 亚洲图片激情小说| 欧美国产日韩一区| 激情欧美一区二区三区| 亚洲一区制服诱惑| 亚洲国产综合91精品麻豆| 欧美亚洲午夜视频在线观看| 欧美日韩精品欧美日韩精品| 伊人久久久大香线蕉综合直播| 午夜精品久久久久久| 亚洲国产午夜| 久久综合中文字幕| 狠狠干综合网| 久久精品国产在热久久| 亚洲愉拍自拍另类高清精品| 欧美了一区在线观看| 91久久精品国产91久久性色| 久久久欧美精品| 亚洲自拍16p| 国产精品久久久久久久久久免费看 | 欧美高清在线精品一区| 影音先锋日韩精品| 久久理论片午夜琪琪电影网| 亚洲在线中文字幕| 欧美亚州一区二区三区| 亚洲天堂av在线免费观看| 亚洲福利在线观看| 欧美成人免费观看| 亚洲国产综合在线| 欧美高清视频| 美女诱惑黄网站一区| 在线日韩电影| 欧美1区3d| 欧美国产日产韩国视频| 亚洲理论电影网| 亚洲国产一区二区三区高清| 欧美激情视频网站|