1. 程式人生 > >常系數齊次線性遞推初探

常系數齊次線性遞推初探

我們 https log 參數 amp 實現 註意 -a mmm

常系數齊次線性遞推式第n項的快速計算初探 XJB學後的XBJ胡扯

要做啥?

\(f[n]=\sum_{i=1}^ka[i]f[n-i]\)\(a,f[1\to k]\)已經給出。

我會矩陣快速冪!

時間復雜度\(O(k^3\log n)\),其中\(n\le 10^9,k\le32000\),emmm。

會魔法!

設初始狀態矩陣為\(S\),轉移矩陣為\(A?\),不難發現一步轉移長得像這個樣子(四階情形)
\[ \begin{bmatrix} f[n]\f[n-1]\f[n-2]\f[n-3] \end{bmatrix} =\begin{bmatrix} a[1]&a[2]&a[3]&a[4]\1&0&0&0\0&1&0&0\0&0&1&0\\end{bmatrix} \begin{bmatrix} f[n-1]\f[n-2]\f[n-3]\f[n-4] \end{bmatrix} \]


\(n=n-k?\),構造序列\(c?\)滿足\(A^n=\sum_{i=0}^{k-1}c[i]A^i?\),兩邊同時右乘\(S?\)
\[ A^nS=(\sum_{i=0}^{k-1}c[i]A^i)S=\sum_{i=0}^{k-1}c[i]A^iS \]
我們的答案為\((A^nS)[0,0]\),註意\(A\)的特征,可以發現,
\[ (A^nS)[0,0]=\sum_{i=0}^{k-1} c[i](A^iS)[0,0]=\sum_{i=0}^{k-1}c[i]S[i,0] \]
所以只要構造出\(c?\),我們就能\(O(k)?\)地完成答案的計算。所以\(c?\)的構造才是重點啊

\(G(A)\)

是一個以矩陣為參數的\(k\)次多項式,並且\(G(A)=0\),那麽
\[ A^n=P(A)G(A)+Q(A)=P(A)G(A)+\sum_{i=0}^{k-1}c[i](A^i)=\sum_{i=0}^{k-1}c[i]A^i \]
所以序列\(c\)就是\(A^n\bmod G(A)\)的系數。所以\(G(A)\)的構造才是重點啊

更強duliu的魔法

上接,若等式\((\lambda I-A)V=0?\)成立,稱\(\lambda?\)\(A?\)的特征值,\(V?\)為特征向量,有如下結論

  1. \(\det(A)\not=0\),則\(A\)\(k\)組線性無關的特征向量
  2. \(\det(\lambda I-A)=0\)
    是等式種\(V\)存在的充要條件(\(p(\lambda)=\det(\lambda I-A)\)\(A\)的特征多項式)

Cayley-Hamilton theorem

\(\det(A)\not=0\),則\(\prod_{t}(\lambda[t]I-A)=0\)\(\lambda[t]\)是第\(t?\)個特征值。

肉眼可見對於轉移矩陣\(A?\)滿足\(\det(A)=(-1)^{k-1}a[k]\not=0?\),所以\(G(x)=\prod_{t}(\lambda[t]I-A)?\)

然而還是還是不會

結論多項式\(p(\lambda)\)與多項式\(\prod_{t}(\lambda[t]I-A)\)的系數一樣。

所以求出\(p(\lambda)?\)的系數就好了,手玩可得
\[ p(\lambda)=\lambda^k-\sum_{i=1}^ka[i]\lambda^{k-i} \]
為什麽我手玩的\(p(\lambda)\)沒有系數\((-1)^k\)呢?

所以,得到\(p(\lambda)?\)的系數構造出\(G(A)?\)再得到\(A^n\bmod G(A)?\),然後獲取答案就行了。

取模的那部分是快速冪套多項式取模,所以總的時間復雜度為\(O(k\log k\log n)?\)

魔法的copy實現

暫時留坑 題目傳送門

常系數齊次線性遞推初探