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

雁過無痕

  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国内精品久久| 免费视频亚洲| 欧美a一区二区| 国产一区深夜福利| 午夜精品久久久99热福利| 亚洲一区二区三区精品在线| 欧美成年人视频网站| 美国十次了思思久久精品导航| 国产日韩精品一区二区三区在线| 一区二区三区高清| 一本久道久久综合中文字幕| 欧美成人午夜视频| 亚洲第一久久影院| 亚洲精品乱码久久久久久按摩观| 久久久久久高潮国产精品视| 久久天天躁夜夜躁狠狠躁2022 | 亚洲欧美国产精品专区久久| 一区二区高清在线| 欧美激情女人20p| 亚洲国产天堂久久综合| 亚洲精品国产精品国自产观看| 久久字幕精品一区| 欧美成在线视频| 亚洲精品欧美日韩专区| 欧美va天堂在线| 亚洲人成网站色ww在线| 一卡二卡3卡四卡高清精品视频 | 欧美成人精品一区二区| 欧美高清在线视频观看不卡| 永久久久久久| 久热国产精品| 欧美激情一区二区三区蜜桃视频| 国产真实精品久久二三区| 欧美在线一二三四区| 久久精品一区二区三区四区| 激情一区二区三区| 久久久国产精品亚洲一区| 欧美不卡福利| 91久久久久| 欧美日韩精品一区二区三区| 亚洲免费高清视频| 香蕉久久夜色精品| 国产欧美日韩精品丝袜高跟鞋| 午夜亚洲精品| 久久男人av资源网站| 亚洲国产精品久久91精品| 欧美国产激情| 亚洲国产精品传媒在线观看| 亚洲自拍啪啪| 国产精品伊人日日| 可以看av的网站久久看| 亚洲国产另类精品专区| 亚洲免费中文| 国产主播一区| 欧美日韩高清在线播放| 亚洲一区二区三区成人在线视频精品| 久久午夜视频| 亚洲裸体在线观看| 国产一区二区久久| 麻豆免费精品视频| 亚洲一区二区欧美| 欧美成人免费全部观看天天性色| 中文av一区特黄| 国产亚洲人成网站在线观看| 欧美精品日韩一区| 亚洲免费综合| 亚洲精品欧美一区二区三区| 欧美一区二区三区在线播放| 99re热这里只有精品视频| 国产精品私房写真福利视频| 欧美成人性生活| 亚洲综合日韩在线| 日韩视频在线一区| 久久这里只有精品视频首页| 午夜精品亚洲一区二区三区嫩草| 一区免费观看| 国产日韩欧美精品综合| 欧美福利电影网| 久久久综合香蕉尹人综合网| 夜夜嗨av一区二区三区四区| 欧美国内亚洲| 欧美中文字幕视频在线观看| 亚洲特色特黄| 亚洲成人在线视频播放| 国产日产亚洲精品系列| 欧美另类高清视频在线| 老司机aⅴ在线精品导航| 亚洲男人av电影| 99在线热播精品免费99热| 欧美aⅴ99久久黑人专区| 久久久久久久综合日本| 亚洲一级在线| 在线看日韩av| 国产免费成人| 欧美日韩999| 玖玖综合伊人| 麻豆精品网站| 久久久不卡网国产精品一区| 欧美与黑人午夜性猛交久久久| 9色国产精品| 日韩一级免费| 亚洲国产精品女人久久久| 久久夜色撩人精品| 久久av一区二区| 亚洲在线观看免费| 亚洲日本aⅴ片在线观看香蕉| 国产一级揄自揄精品视频| 国产精品国产三级国产 | 欧美精品亚洲二区| 美女精品视频一区| 欧美激情视频一区二区三区不卡| 久久久蜜桃精品| 久久综合免费视频影院| 久久精品国产精品亚洲综合| 久久精品日韩欧美| 欧美在线视频免费观看| 久久青草欧美一区二区三区| 久久精品国产精品亚洲| 久久在线免费| 欧美黄色免费| 国产精品www色诱视频| 欧美视频在线观看免费网址| 国产精品日本欧美一区二区三区| 国产精品久久久久国产精品日日| 国产美女精品免费电影| 国产一区二区三区无遮挡| 亚洲国产精品成人一区二区| 亚洲激情成人在线| 一区二区国产日产| 亚洲欧美日韩国产中文在线| 久久久水蜜桃| 欧美国产另类| 中文日韩电影网站| 久久精品日韩| 欧美日韩日本网| 国产亚洲欧美在线| 日韩一二三在线视频播| 欧美一级视频精品观看| 美日韩免费视频| 一本久道久久综合狠狠爱| 欧美在线在线| 欧美日韩在线一区二区| 国产精品夜夜嗨| 亚洲黄色免费| 亚洲综合另类| 欧美成人一区二区三区片免费| 99国产精品私拍| 亚洲欧美中文日韩v在线观看| 欧美成人按摩| 国产精品区免费视频| 亚洲精品久久久久久下一站| 亚洲欧美伊人| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲视频在线一区| 香蕉尹人综合在线观看| 欧美精品v日韩精品v韩国精品v| 国产精品久久久久久久一区探花 | 欧美视频在线免费看| 伊人春色精品| 亚洲午夜精品久久久久久app| 免费的成人av| 一区二区三区成人精品| 女女同性精品视频| 国产欧美亚洲一区| 亚洲香蕉网站| 另类专区欧美制服同性| 亚洲尤物视频网| 欧美成在线观看| 在线欧美日韩国产| 午夜视频久久久| 99精品国产一区二区青青牛奶| 亚洲欧美视频在线观看| 欧美日韩一区精品| 99精品视频一区| 欧美电影免费观看高清| 久久成人精品电影| 国产精品蜜臀在线观看| 亚洲视屏一区| 亚洲电影视频在线| 久久综合久色欧美综合狠狠 | 欧美区日韩区| 一区二区亚洲精品国产| 亚洲一区在线直播| 亚洲精品日韩在线观看| 久久精品国产一区二区电影 | 久久久久久久久久久成人| 亚洲欧洲日产国产综合网| 免费在线成人av| 激情91久久| 欧美a级片一区| 欧美尤物巨大精品爽| 国产精品亚洲综合|