二階常係數線性差分方程的一般形式為: 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)的特
解,其中
λ為非零
待定係數
,代入方
程後,有
λn(λ2+a
λ+b)
=0 因
λ≠0,
故函式y
n=λn
是方程(
1−2)
的特解的
充分必要
條件是λ
滿足方程
λ2+aλ+b
=0............................................(1
−3)
方程(1-3)成為方程(1-1)或(1-2)的特徵方程,特徵方程的解稱為特徵根或特徵值。
根據二次代數方程(1-3)解的三種情況,可以仿照二階常係數齊次線性微分方程,分別給出方程(1-1)的通解。
1.1特徵方程有兩個相異實根 即當
判別式δ
=a2−
4b>0時
,方程(
1−2)
有兩個相
異實根
λ1=1
2(−a
−δ−−
√),λ
2=12
(−a+
δ−−√
)...
.(1−
4)於是方程(1-2)有兩個特解 yn
1=λn
1,yn
2=λn
2 且由
yn1y
n2=(
λ1λ2
)n≠常
數,知y
n1與y
n2線性
無關,從
而得到方
程(1−
2)的通
解 yn
=c1λ
n1+c
2λn2
,其中λ
1,λ2
由式(1
−4)給
出,c1
,c2為
任意常數
。 1.2特徵方程有二重根 即當
判別式δ
=a2−
4b=0
時,方程
(1−3
)有二重
根λ1=
λ2=−
12a,
於是方程
(1−2
)有乙個
特解yn
1=(−
12a)
n,可驗
證方程(
1−2)
有另一特
解yn2
=n(−
12a)
n (注:係數n可參照二階常係數線性齊次微分方程的通項證明求得) 且由
yn1y
n2=1
n≠常數
,知yn
1與yn
2線性無
關,從而
得到方程
(10−2
)的通解
yn=(c1+
c2n)
(−12
a)n,
其中c1
,c2為
任意常數
。 1.3特徵方程有兩個共軛復根 即當
判別式δ
=a2−
4b<0時
,方程(
1−3)
有兩個共
軛復根
λ1=1
2(−a
+i−δ
−−−√
),λ2
=12(
−a−i
−δ−−
−√)
通過直接驗證可知,方程(1-2)有兩個特解 yn
1=rn
cosβ
n,yn
2=rn
sinβ
n 其中
r=(−
a2)2
+(−δ
√2)2
−−−−
−−−−
−−−−
−−√=
b√..
....
..(詳
見其他參
考)
遞推式:yn+
2=⎧⎩
⎨0,1
,yn+
1+yn
,n=0
n=1…
…..(
1−5)
n>1
由式(1
−2)可
知,yn
+2−y
n+1−
yn=0............(1
−6)
其中a=-1,b=-1 令y
n=λn
,式(1
−6)化
成λn(
λ2−λ
−1)=
0,解得
yn=c1(1
+5√2
)n+c
2(1−
5√2)
n,由y
0=0,
y1=1
可知 c
1=15
√,c2
=−15
√ yn
=15√
(1+5
√2)n
−15√
(1−5
√2)n
即為通解
可知,時間複雜度為指數形式。
1.時間複雜度為o(n)的方法:
int fibonacci(int n)
if (n==1)
intmin=0;
intmax=1;
int i=2;
int result=0;
while (i<=n)
return result;
2.時間複雜度為o(logn)的方法:
根據式(1-5),可以化成矩陣的形式: (y
n+2y
n+1)
=(11
10)(
yn+1
yn)=
…=(1
110)
n+1(
y1y0
) 因而
計算yn
就簡化為
計算矩陣
的(n+
1)次方
,再對矩
陣分解,
計算矩陣
(n−2
)/2次
方的平方
,逐步分
解,因而
時間複雜
度為o(
logn
)
#include
using
namespace
std;
class matrix
n=num;
clear();
}void clear()}}
void unit()
}matrix operator=(const matrix mtx)
matrix operator*(const matrix &mtx)
};int main(int argc, const
char * argv)
first=first*first;
n=n/2;
}cout
<<(result.m[0][0]+result.m[0][1])0;}
斐波那契數列時間複雜度
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...
斐波那契數與時間複雜度
斐波那契數列 經典數學問題之一 斐波那契數列,又稱 分割數列,指的是這樣乙個數列 1 1 2 3 5 8 13 21 第一項,第二項的值為1,第三項開始,它的值為前兩項之和。實現非常簡單 簡單的看看這個圖,分析一下,根據fab 1 n 1 fab 1 n 2 如果想要得到斐波那契其數的第五項,首先要...
演算法入門 斐波那契數列和演算法的時間複雜度
此處使用三種方式實現斐波那契數列 遞迴 遞推和通項公式。實現過程如下 include include include includeusing namespace std 遞迴 int recurrence1 int n 遞推 int recurrence2 int n 通項公式 得到的值都是整數 ...