斐波那契數列:
經典數學問題之一:斐波那契數列,又稱**分割數列,指的是這樣乙個數列: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。輸出格式 輸出一行,...