斐波那契數(shù)列算法問(wèn)題(最優(yōu)可達(dá)對(duì)數(shù)階)

????????有一個(gè)大家都很熟悉的經(jīng)典數(shù)學(xué)問(wèn)題,即斐波那契數(shù)列算法問(wèn)題洪碳。這個(gè)經(jīng)典案例在算法中又會(huì)變成什么樣子呢洲炊?


int fib(int n){?

????if(n?==?0)

????????return 0;

????if(n?==?1)

????????return 1;

????return fib(n - 1)+fib(n - 2);

}


? ? ? ? 首先这刷,我們很容易使用遞歸算法來(lái)設(shè)計(jì)該算法。但是計(jì)算出結(jié)果是一個(gè)指數(shù)階的算法砌些,當(dāng)n到100的時(shí)候,每多算一個(gè)斐波那契數(shù)需要至少多算一年加匈。

? ? ? ? 那我們今天就主要介紹一下優(yōu)化后的算法存璃。

????????算法優(yōu)化1:每次記錄前兩項(xiàng)的值,只需要一次加法運(yùn)算得到當(dāng)前項(xiàng)雕拼,算法時(shí)間復(fù)雜度降低到了O(n)纵东,效率大幅度提高。

????????算法改進(jìn)2:使用迭代法啥寇,兩數(shù)輾轉(zhuǎn)相加,每次記錄前一項(xiàng),時(shí)間復(fù)雜度為O(n)啼县,空間復(fù)雜度降低到了O(1)凝赛。代碼如下:


int fib(int n){

????int i , s1 = 1 , s2 = 1;

????if(n < 1)

????????return -1;

????if(n == 1 || n == 2)

????????return 1;

????for(i = 3;i <= n; i++){

????????s1 = s1 + s2;

????????s1 = s2 - s1;

????}

????return s2;

}


????????算法改進(jìn)3:接下來(lái)我們來(lái)看看對(duì)數(shù)階的斐波那契數(shù)列算法。先來(lái)看下面這種算法:


int fib(int n){

????return fib_iter(1,0,n);

}

int fib_iter(a,b,count){

? ??if(count == 0)

? ??????return b;

? ??return fib_iter(a+b , a,? count - 1);

}


????????在這種算法中磷醋,我們每次遞歸都將a+b的值賦給a猫牡,把a(bǔ)的值賦給b,通過(guò)觀察可以發(fā)現(xiàn)邓线,從1和0開(kāi)始將規(guī)則反復(fù)應(yīng)用n次淌友,將產(chǎn)生一對(duì)數(shù)fib(n)和fib(n+1),現(xiàn)在將這種規(guī)則看成a = bq + aq + a*pb = bp + aq其中p=0,q=1把這種變換稱(chēng)為T(mén)變換,

Tpq 變換有個(gè)特性是 Tpq 的二次方等于Tp‘q’褂痰, p‘ = pp + qq , q' = 2pq + q*q

即:a = (bp+aq)p+(bq+aq+ap)q+(bq+aq+ap)p = b(2pq+q^2)+a(p^2+2pq+2q^2)

b = (bp+aq)p+(bq+aq+ap)q = b(p^2+q^2)+a(q^2+2pq)

此處p=0亩进,q=1


int fib(int n){

????return fib_iter(1,0,0,1,n);

}

int fib_iter(int a,int b,int p,int q,int count){

????if (count == 0)

????????return b;

else? if (count%2)

????return fib_iter(b*p+a*q+a*p,b*p+a*q,p,q,count-1);

else

????return fib_iter(a,b,p*p+q*q,q*q+2*p*q,count/2);

}


這樣的算法時(shí)間復(fù)雜度可以達(dá)到對(duì)數(shù)階。大幅地提高了算法的效率缩歪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末归薛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子匪蝙,更是在濱河造成了極大的恐慌主籍,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逛球,死亡現(xiàn)場(chǎng)離奇詭異千元,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)颤绕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)幸海,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)祟身,“玉大人,你說(shuō)我怎么就攤上這事物独⊥嗔颍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵挡篓,是天一觀的道長(zhǎng)婉陷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)官研,這世上最難降的妖魔是什么秽澳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮戏羽,結(jié)果婚禮上担神,老公的妹妹穿的比我還像新娘。我一直安慰自己蛛壳,他們只是感情好杏瞻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著衙荐,像睡著了一般捞挥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忧吟,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天砌函,我揣著相機(jī)與錄音,去河邊找鬼溜族。 笑死讹俊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的煌抒。 我是一名探鬼主播仍劈,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寡壮!你這毒婦竟也來(lái)了贩疙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤况既,失蹤者是張志新(化名)和其女友劉穎这溅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體棒仍,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悲靴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莫其。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癞尚。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耸三,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浇揩,到底是詐尸還是另有隱情吕晌,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布临燃,位于F島的核電站,受9級(jí)特大地震影響烙心,放射性物質(zhì)發(fā)生泄漏膜廊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一淫茵、第九天 我趴在偏房一處隱蔽的房頂上張望爪瓜。 院中可真熱鬧,春花似錦匙瘪、人聲如沸铆铆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)薄货。三九已至,卻和暖如春碍论,著一層夾襖步出監(jiān)牢的瞬間谅猾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工鳍悠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留税娜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓藏研,卻偏偏與公主長(zhǎng)得像敬矩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蠢挡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容