【多項式】常係數齊次線性遞推

TIP:這篇文章只是快速入門,並不包含更加詳細的內容

Description

求以下遞推式第n項:
fi=j=1mcjfijf_i=\sum_{j=1}^mc_jf_{i-j}
其中cjc_j爲常數,
形如這樣的式子叫做:常係數齊次線性遞推,

接下來我們將討論,當m較小,n很大時,如何快速求出答案

前置技能

先介紹一些必要的東西:

若對於m階矩陣AA,有常數λ\lambda,非零列向量v\overrightarrow{v} ,滿足:
λv=vA\lambda \overrightarrow{v}=\overrightarrow{v} A
那麼我們就稱:λ\lambda爲矩陣特徵值,v\overrightarrow{v}爲矩陣特徵列向量,
移項得:
(λIA)v=0(\lambda I-A)\overrightarrow{v}=0
也寫作:
(λIA)=0(\lambda I-A)=0
也就是說,(λIA)(\lambda I-A)的行列式均爲0,即λIA=0|\lambda I-A|=0

我們可以將λIA|\lambda I-A|看做是關於λ\lambda的一個m次多項式,記作f(λ)f(\lambda),叫做A的特徵多項式,
對於矩陣AA的任意特徵值λ0\lambda_0,都有f(λ0)=0f(\lambda_0)=0

順便也定義一下矩陣多項式(即把普通多項式f(x)f(x)xx換成一個矩陣),
這個和向量差不多,加法就直接按位相加,常乘法就直接乘,乘法就矩陣乘法,

哈密頓—凱萊定理:對於矩陣A的特徵多項式f(x)f(x),滿足f(A)=0f(A)=0

Solution

先把原始轉成矩陣乘法的形式,
對於轉移矩陣C,我們考慮求它的特徵多項式:
C大概是長這樣的
(1)λIC=(λc1c2cm1cm1λ000100001λ) \lambda I-C= \left( { \begin{matrix} \lambda-c_1 & -c_2 & \cdots &-c_{m-1} & -c_m \\ -1 & \lambda & \cdots & 0 &0 \\ 0 & -1 &\cdots & 0 & 0\\ \vdots & \vdots & \ddots & \vdots &\vdots \\ 0 & 0 & \cdots & -1 & \lambda \end{matrix} \tag{1} } \right)
把第一行提出來,可以發現剩下的這個東西的特徵多項式(行列式)比較好求,即:
f(λ)=λmi=1mciλmif(\lambda)= \lambda^{m}-\sum_{i=1}^mc_i \lambda^{m-i}
(本來要乘(1)i1(-1)^{i-1}的但被逆序對貢獻的-1消掉了)

現在我們的目標是求Cn1C^{n-1},求出這個東西以後就直接乘上初始矩陣即可,

我們把Cn1C^{n-1}看做是一個關於矩陣C的(n-1)次項多項式(只是只有一項罷了),
顯然的,Cn1C^{n-1}可以寫成P(C)f(C)+R(C)P(C)f(C)+R(C)的形式,其中R(C)=Cn1mod  f(C)R(C)=C^{n-1}\mod{f(C)}

又已知f(C)=0f(C)=0,所以只用求R(C)R(C)即可,
我們可以把矩陣C先看成普通的實數x,即先求出R(x)=xn1mod  f(x)R(x)=x^{n-1}\mod{f(x)}中的R(x)R(x)的係數,最後再考慮矩陣C,
關於R(x)R(x)怎麼求,我們可以考慮使用快速冪+多項式取模解決,
複雜度:O(mlog(n)log(n))O(m\log(n)\log(n))

設矩陣GG表示一開始遞推式的前m項,gig_i表示第i項
設多項式R(x)=i=0m1dixiR(x)=\sum_{i=0}^{m-1}d_ix^i
好了我們現在求出了R(x)R(x),現在我們要求的是R(C)GR(C)*G,將其展開:
i=0m1di(CiG)\sum_{i=0}^{m-1}d_i*(C^i*G)
答案就是這東西算出來的矩陣的第一項,
可以發現CiGC^i*G這個矩陣的第一項就是gi+1g_{i+1},也就是說:
Ans=i=0m1digi+1Ans=\sum_{i=0}^{m-1}d_i*g_{i+1}

Extra

關於遞推的前m項怎麼算,這個可以用生產函數解決,
我們可以把序列寫成多項式g(x)g(x),轉移也寫成多項式形式c(x)c(x)
這個多項式具有無限多項,滿足:
g(x)=g(x)c(x)+rg(x)=g(x)*c(x)+r
其中r爲第一項,
移項得:g(x)=r1c(x)g(x)=\frac{r}{1-c(x)}
這東西多項式求逆元即可,

這同時啓示我們只要存在形如這樣的式子即可以用這種方法解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章