特征多項式


特征多項式與常系數線性齊次遞推

一般來說,這個東西是用來優化能用矩陣乘法優化的遞推式子的。

通常,這種遞推式子的特征是在齊次的條件下,轉移系數也可以通過遞推得到。

對於這樣的遞推,通常解法為$O(NK)$的遞推或者$O(k^3\log n)$的矩陣乘法,但是有些**毒瘤**的出題人~~吉老師~~,會將這樣的遞推強行出成$K\le 1000$,特別,對於常系數線性齊次遞推有些出題人甚至會出成$20000$!

這樣,就需要引入一個非常有趣~~頭禿~~的概念:特征多項式。

首先,我們需要介紹$Cayley-Hamilton$定理

對於一個$n$階的一個方陣,它的特征多項式為$p(\lambda)=|\lambda E-A|=\lambda^n+b_1\lambda^{n-1}+b_2\lambda^{n-2}+...+b_n$

那么顯然:$p(A)=0$

也就是說:$A^N+b_1A^{n-1}+...+b_n=0$,即$p(\lambda)$為原多項式的化零多項式。

因此,這個特征多項式可以通過高斯消元及拉格朗日插值求出。

求矩陣的特征多項式

一個$O(n^4)$的做法

顯然,我們得到的特征多項式是一個$n$階多項式,那么只需要知道$n+1$個點的點值就可以得到了。

也就是,我們把$n+1$個數代入$|\lambda E-A|$中(作為$\lambda$),然后暴力高斯消元即可得到一個矩陣的特征多項式。

那么,接下來,只需要拉格朗日插值即可。

這個做法作為一個$n^4$的做法其實想要卡掉矩陣乘法是很難的,除非將遞推的項數放到$10^{1000}$這樣的級別,如[BZOJ4162]

那么接下來,我們考慮剛剛的做法能否被優化。

顯然,每次$n^3$求矩陣行列式太慢了。

一個$O(n^3)$的做法

對於這樣的矩陣:$A=P\times B\times P^{-1}$

稱$A,B$是相似的,也就是說,對於$A,B$的特征多項式相同。

構造還是很容易的,只需要保留每行與每行之間的關系即可。

對於這樣的矩陣,我們稱之為上海森堡矩陣。

$\begin{pmatrix} a_{1,1}&a_{1,2}&a_{1,3}&\cdots&a_{1,n}\\ a_{2,1}&a_{2,2}&a_{2,3}&\cdots&a_{2,n}\\ 0&a_{3,2}&a_{3,3}&\cdots&a_{3,n}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ 0&0&0&\cdots&a_{n,n} \end{pmatrix}$

那么,對於這樣的矩陣,求行列式的時間復雜度就降為$n^2$了!

然后,總時間復雜度為$n^3+n^2\log m$,或者為$n^3+n\log n \log m$(並無卵用),然后對於$n^3 \log m$的矩陣乘法構成了鮮明的優勢(大霧

顯然,其實上面的東西沒有那么有用...

但是還是有必要知道的,萬一他卡你呢?

常系數線性齊次遞推的矩陣的特征多項式

定義:遞推式為$f_i=\sum\limits_{j=1}^na_j\times f_{i-j},i>n$的遞推。

講道理,這個東西才非常有用...

對於所有的常系數線性齊次遞推來說,它們的矩陣形態類似,同樣,他們的特征多項式也類似...

其實手畫一下就可以發現,它們的特征多項式都是$p(\lambda)=\lambda^n-a_1\lambda^{n-1}-a_2\lambda^{n-2}-...-a_n$

按照行列式的定義展開式子退一下就得到啦!

特征多項式的使用手冊

其實,使用方法很簡單啦,就是運用之前得到的特征多項式性質,$p(A)=A^N+b_1A^{n-1}+...+b_n=0$

那么,對於這樣的式子,就可以做到將所有的$A^K$用$A^0\sim A^n$的矩陣線性表達出來了。

$A^{x+y}=A^x \times A^y$

那么$A^x=\sum\limits_{i=0}^n b_i\times A^i,A^y=\sum\limits_{i=0}^nc_i\times A^i$

也就是:$A^{x+y}=\sum\limits_{i=0}^n\sum\limits_{j=0}^nb_i\times c_{j}\times A^{i+j}$

因為有:$p(A)=0$也就是說:$A^{x+y}=\sum\limits_{k=0}^{2\times n}(\sum\limits_{i=0}^{\min(n,k)}b_ic_{k-i})A^k \mod p(\lambda)$

然后顯然,可以用倍增(其實就是快速冪)上述操作,也就是我們得到了一個$n^2\log m$復雜度的遞推。

對於上述暴力操作可以用$NTT$或$FFT$優化上述多項式相乘和多項式取模。

也就是說,我們得到了一個$n\log n \log m$的優秀做法!(拿頭寫啊

關於答案

$A^x=\sum\limits_{i=0}^n b_i\times A^i$

這個式子已經給我們答案了,也就是說,這個矩陣的前$n$項加上系數相加即可,但是顯然這個東西是$n^4$的

如果要求$f_m$的話,這個東西只需要用到$f_0\sim f_n$即可

如果求矩陣的話,還是老老實實的一個一個乘吧...

例題.jpg

求矩陣特征多項式裸題:[BZOJ4162]

常系數線性齊次遞推$n^2\log m$裸題:[BZOJ4161]

高難度的東西:[NOI 2017 泳池]

附件

NOI 2017 泳池 題解

對我來說,可能我只能接受$k\le 2000$,如果再大就想要打人了...

首先70分的暴力基本雷同[UNR 2 積勞成疾](http://uoj.ac/problem/311)

大概就是推一個$f[i][j],s[i][j]$即可,[我不想再寫一遍了](https://winniechen.cn/?p=152)

剩下的就是可以把這個轉移寫成矩陣的形式,然后就可以拿到優秀的$90$分了。

最后,根據上面的東西,優化一下就可以AC掉這道題了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM