问题引入
设有递推方程 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