一道裸题。
题目大意
给定方阵 $A$,求 $p_A(\lambda)=|\lambda I-A|$。
$n\le 500$,对 $998244353$ 取模。
source: https://www.luogu.com.cn/problem/P7776
思路
正常求 $\R$ 上的矩阵行列式应该是 $\Theta(n^3)$ 的,但是这里显然不能忽略乘法的复杂度,复杂度会达到惊人的 $\Theta(n^4\log n)$,显然不可行,怎么办呢?
算法一
代 $n+1$ 个值给 $\lambda$,总共 $\Theta(n^4)$ 求出来分别的行列式,$\Theta(n^3)$ 插值,搞定。时间复杂度 $\Theta(n^4)$,空间复杂度 $\Theta(n^3)$。
期望得分 $40$。
算法二
回顾求行列式的方法:将原本的矩阵变为一个容易求解行列式的矩阵。
我们定义相似矩阵:$A\sim B\Leftrightarrow \exist P:A=PBP^{-1}$。
我们有 $A\sim B\Rightarrow p_A=p_B$,因为:
这时肯定有人想,要是能消成上三角就好了!但是非常抱歉,大多数形如 $|\lambda I-A|$ 的矩阵不能被消成上三角。
如果消成上三角,你不就是把这个多项式给分解了么?$\R$ 上分解多项式显然要到 $\C$ 上。
——数学神仙 whd
我们可以退而求其次,如果我们少消一斜线($a{12}-a{n-1n}$)(称这样的矩阵是上 Hessenberg 矩阵),这样我们仍然可以在 $\Theta(n^3)$ 的复杂度内递推:
设前 $i$ 行列的特征多项式为 $pi$,则 $p_0=1$,$p_1=\lambda-A{11}$,$pi=(\lambda-A{ii})p{i-1}{\color{red}-}\sum\limits{j=0}^{i-2}pjA{j+1,i}\prod\limits{k=j+2}^iA{k,k+1}$。
注意红色标注的符号,这里符号恒为 $-$ 是因为虽然常数提供的逆序对个数奇偶性一直在变动导致符号变动,但与此同时 $A$ 前的负号的次幂数奇偶性也一直在变动,符号就恒为负了。
注意到这里我们不需要再进行多项式乘法了,复杂度 $\Theta(n^3)$。
代码
多亏了那个负号,调了好几个小时!
1 |
|