「循环矩阵相关的一些东西」
大概是北大集训的某道题?我感觉挺有意思的,随便写写。
原题需要先矩阵树定理转化成循环矩阵求行列式。我们直接跳过矩阵树 虽然我根本没想到矩阵树 考虑行列式咋求。
首先定义 \(n\times n\) 的循环矩阵 \(A\),满足 \(A_{i,j} = a_{(i-j)\bmod n}\)。下文为了方便,省去下标中的取模。
考虑矩阵乘法 \(C = AB\),其中 \(A, B\) 都是循环矩阵,则有 \(C_{i,j}=\sum_{k=0}^{n-1}a_{i-k}b_{k-j}\)。
注意到 \(C\) 也为循环矩阵,对应的 \(c\) 可以通过 \(c_{i+j} = \sum a_ib_j\) 算出。
注意这里下标要取模,所以得到循环矩阵的乘法可以描述为多项式的循环卷积。
对于两个多项式 \(f(x)=a_0+a_1x+\dots+a_{n-1}x^{n-1}\) 与 \(g(x) = b_0 + b_1x + \dots + b_{n-1}x^{n-1}\),循环卷积还可以用 DFT 描述。
即:若 \(h(x) = f(x)\circ g(x)\) 是两者循环卷积的结果,则有 \(h(\omega_{n}^i)=f(\omega_{n}^i)g(\omega_{n}^i)\)。
将矩阵乘法转化成 \(n\) 个值对应相乘,不难想到这 \(n\) 个值是该矩阵的特征值。事实上,循环矩阵是可对角化的:
知道所有特征值后,行列式 \(\det A = \prod \lambda_i = \prod f(\omega_n^i)\)。还可以验算矩阵的迹 \(\mathrm{tr} A = \sum f(\omega_n^i) = n\times a_0\)。
solution 给的做法本质上就是这个。
现场好像说还可以用结式解释,但是我不会。那就先留个坑。