斐波那契數與時間複雜度

2021-09-10 01:55:41 字數 1099 閱讀 7764

斐波那契數列:

經典數學問題之一:斐波那契數列,又稱**分割數列,指的是這樣乙個數列:1、1、2、3、5、8、13、21、……第一項,第二項的值為1,第三項開始,它的值為前兩項之和。**實現非常簡單:

簡單的看看這個圖,分析一下,根據fab_1(n - 1) + fab_1(n - 2),如果想要得到斐波那契其數的第五項,首先要知道第四項和第三項,要知道第四項,就得先知道第三項和第二項,進行了大量的重複計算,非常浪費。

在這裡引入時間複雜度,乙個演算法所花費的時間與其語句執行的次數成正比,演算法中的基本操作的執行次數,為演算法時間複雜度。

我們一般採用大o漸進表示法描述乙個演算法的時間複雜度。時間複雜度主要討論的是演算法執行的次數。

一般演算法時間複雜度o(n)的表示方法:

(1)用常數1取代執行時間中的所有加法常數 ;

(2)在修改後的執行次數函式中,只保留最高端項;

(3)如果最高端項係數存在且不是1,則去除與這個項相乘的常數;

(4)遞迴演算法的時間複雜度 == 遞迴總次數*每次遞迴的次數

把上邊的斐波那契數用迴圈寫出來

int

fab_2

(int n)

else

return sum;

}}

o(n) = n

拿出上邊的遞迴方法 o(n)= 2^n

下來看優化的方法

int

fab_3

(int frist,

int scend,

int n)

elseif(

3== n)

return

fab_3

(scend, frist + scend, n -1)

;}

o(n)=

斐波那契數列時間複雜度

1.時間複雜度 o 2 n 空間複雜度 o n def fib n if n 3 return 1return f n 1 f n 2 推導 時間複雜度 f n f n 1 f n 2 每一層都包含乙個加法操作 例如n 8時,t n 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 1...

斐波那契數列的時間複雜度詳釋與改進方法

二階常係數線性差分方程的一般形式為 yn 2 a yn 1 byn f n n 0,1,2,1 1 其中a,b為已知 常數,且 b 0,f n 為已知函 數。方 程 1 1 的對 應齊次方 程為 yn 2 ayn 1 b yn 0.1 2 設yn n為方 程 1 2 的特 解,其中 為非零 待定係數...

斐波那契數

入門訓練 fibonacci數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,...