常系數齊次線性遞推初探
常系數齊次線性遞推式第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)?\)地完成答案的計算。
令\(G(A)\)
\[ 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)\)的系數。
更強du力liu的魔法
上接,若等式\((\lambda I-A)V=0?\)成立,稱\(\lambda?\)為\(A?\)的特征值,\(V?\)為特征向量,有如下結論
- 若\(\det(A)\not=0\),則\(A\)有\(k\)組線性無關的特征向量
- \(\det(\lambda I-A)=0\)
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實現
暫時留坑 題目傳送門
常系數齊次線性遞推初探