转置原理

基本思想

对于一个 \(n\times m\) 矩阵 \(A\) 和 \(m\) 维向量 \(v\):

\[Av=\left(A^T\right)^Tv \]

如果 \(A^Tu\)(\(u\) 为任意 \(n\) 维向量)可被写为:

\[\sum_{p}A_{p_1}A_{p_2}\cdots A_{p_{|p|}}u \]

则

\[Av=\sum_{p}A_{p_{|p|}}^T\cdots A_{p_2}^TA_{p_1}^Tv \]

例题

多项式多点求值

设 \(n=\deg f(x)\),求 \(x_0,\dots,x_n\) 的点值。

设 \(\textbf{v}\) 为 \(f(x)\) 系数向量,\(A_{i,j}=x_i^j\),即:

\[A=\left[\begin{matrix} 1 &x_0 &x_0^2 &\cdots &x_0^n \\ 1 &x_1 &x_1^2 &\cdots &x_1^n \\ \vdots &\vdots &\vdots &\ddots &\vdots \\ 1 &x_n &x_n^2 &\cdots &x_n^n \end{matrix}\right] \]

考虑求 \(A^Tu\),

\[A^T=\left[\begin{matrix} 1 &1 &\cdots &1 \\ x_0 &x_1 &\cdots &x_n \\ \vdots &\vdots &\ddots &\vdots \\ x_0^n &x_1^n &\cdots &x_n^n \end{matrix}\right] \]

注意到

\[(A^Tu)_i=[z^i]\sum_{j=0}^n\frac{f_j}{1-x_jz} \]

发现可以分治求 \(A^Tu\):

  • 在分治叶子 \(j\) 处,返回分式 \(\frac{f_j}{1-x_jz}\)。
  • 每次分治合并,设左边返回 \(\frac{u(z)}{p(z)}\),右边返回 \(\frac{v(z)}{q(z)}\),则和为 \(\frac{q(z)u(z)+p(z)v(z)}{p(z)q(z)}\)。
  • 设最终得到了 \(\frac{u(z)}{p(z)}\),求 \(p(z)^{-1}\) 并与 \(u(z)\) 卷起来。

写成线性代数形式为:

  • 在分治叶子 \(j\) 处,返回 \(C_j\textbf{v}\)(其中 \(C_{j,x,y}=[x=0\land y=j]\))。
  • 每次合并,设左边返回 \(\textbf{u}\),预处理得到的分母对应矩阵为 \(P\),右边返回 \(\textbf{v}\),预处理得到的分母对应矩阵为 \(Q\),则返回 \(Q\textbf{u}+P\textbf{v}\)。
  • 设最终得到了 \(\textbf{u}\),预处理分母的逆对应矩阵为 \(P'\),则最终结果是 \(P'\textbf{u}\)

多项式 \(g\) 对应矩阵:

\[\left[\begin{matrix} g_0 &0 &0 &\dots &0 \\ g_1 &g_0 &0 &\dots &0 \\ g_2 &g_1 &g_0 &\dots &0 \\ \vdots &\vdots &\vdots &\ddots &\vdots \\ g_n &g_{n-1} &g_{n-2} &\dots &g_0 \end{matrix}\right] \]

注意到该矩阵转置乘向量为差卷积。

把这个过程转置过来自顶向下递归就可以了,注意到每次规模会减半,复杂度 \(\mathcal{O}(n\log^2n)\)。

撤销背包(from P15649 @min_inf)

为了便于理解,我们用多项式卷表示背包。

问题形如,有 \(f_1(x),\dots,f_n(x)\),对若干 \(i\),求 \(P_i(x)=\prod\limits_{j\ne i}f_j(x)\) 的各项系数加权和 \(\sum\limits_{j}k_jP_{i,j}\)。

显然可以直接撤销背包,不过我们忽略他。我们考虑转置,预处理 \(F_i(x)=\prod\limits_{j\le i}f_j(x),G_i(x)=\prod\limits_{j\ge i}f_j(x)\),则 \(P_i=F_{i-1}G_{i+1}\),把 \(F\) 用向量表示,把 \(G\) 用矩阵表示,则所求即

\[\textbf{k}^TG\textbf{F} \]

转置原理

\[\textbf{k}^TG\textbf{F}=\left(\left(\textbf{k}^TG\right)^T\right)^T\textbf{F}=\left(G^T\textbf{k}\right)^T\textbf{F} \]

\(G^T\textbf{k}\) 可以预处理,外面是点乘,都是好做的。

posted @ 2026-06-24 12:07  SmpaelFx  阅读(14)  评论(0)    收藏  举报