問題引入
設有遞推方程 f(n)=k1*f(n-1)+k2*f(n-2),已知k1,k2及f(0),f(1),給定n求f(n)
解法
1.O(n)直接遞推
2.O(m³ * log2n)矩陣快速冪(m為矩陣大小)
3.求f(n)通項公式,O(log2n)快速冪(或光速冪)
求通項公式
法1:可以用求數列通項公式得高中技巧...
法2:用特征方程
前提:已知線性遞推方程;已知f中某兩項
步驟:
1.上述遞推式的特征方程為x²=k1*x+k2(用x²替換f(n),x替換f(n-1),1替換f(n-2)),解此一元二次方程的兩解x1,x2;
2.f(n)的通項公式為f(n)=α*x1n+β*x2n,只需解出α,β;(若x1為k重根,其系數為α+βn+γn2...+ωnk-1)
3.帶入已知得兩項比如f(0),f(1)得關於α,β得二元一次方程組,即可解出α,β。
舉例:
1.f(n)=f(n-1)+f(n-2),f(0)=0,f(1)=1,求f(n)通項公式(斐波那契數列)
特征方程為x²=x+1,解得x=(1±√5)/2;
f(n)=α*[(1+√5)/2]n+β*[(1-√5)/2]n;
帶入 f(0)=1,f(1)=1,得α=√5/5,β=-√5/5;
所以f(n)=√5/5*[(1+√5)/2]n-√5/5*[(1-√5)/2]n;
2.f(n)=233*f(n-1)+666*f(n-2),f(0)=0,f(1)=1,求f(n)通項公式
特征方程為x²=233*x+666,解得;
則f(n)=α*x1n+β*x2n
帶入f(0)=0,f(1)=1,得
所以f(n)=
關於光速冪
例題
擴展--非線性遞推方程求通項公式
https://www.luogu.org/blog/ljc1301/solution-p5517
參考文章:
https://blog.csdn.net/qq_20340417/article/details/78433961