转置原理

转置原理,或称特勒根原理(Tellegen’s Principle),指的是对于矩阵和向量,为优化计算,我们可以考察的计算方法。原因是设有分解,那么

也就是说,如果有快速的计算方法,那么在原理上也一定拥有相同复杂度的算法。

多项式多点求值

多点求值(multi point evaluation),指的是给出多项式以及个横坐标,快速求出。目前已有的算法是通过多项式取模来实现。

注意到,多点求值本质上是对向量做一个线性变换:

这个矩阵是一个范德蒙德矩阵,记作。我们把矩阵转置一下得到

观察发现,转置后的变换,向量的第项求的是。写出它的生成函数,因此我们求的是

这个多项式的前项的系数(对取模)。这个东西可以分治多项式乘法计算。

那么我们把这个矩阵转置回去,就可以得到多点求值的算法。也就是说本质上我们可以把所有初等变换写下来,然后转置一下并反转这个操作序列,然后再照着做一遍,就得到了相同复杂度的多点求值做法。但是这个过于憨批,想必没人会去实现它。为此我们需要分析计算的过程中变换的转置变换是什么。

初等变换

本质上我们进行的变换有如下两种:

  • 把变量乘一个常数,记作
  • 把变量加到变量上,记作

注意,变量的交换可以使用上面两个操作完成。

它们的转置操作分别是

  • 把变量乘一个常数,记作(不变)。
  • 把变量加到变量上,记作

这个大家可以写出初等变换矩阵,然后转置一下,自行验证。

多项式乘法

多项式乘法的变换过程是,给出多项式,那么对于,有,其中

我们设是一个常数多项式,而是输入。那么这个变换的转置就是:,其中。容易发现,这样求出的项。我们记这个变换是

这个可以倒过来 NTT 计算。

转置后的算法

接下来我们具体考虑求的算法。

,那么我们可以先求出,然后再乘上即可。

的过程可以分治计算:

  • 如果,那么直接返回

  • 否则,设

    • 那么有。因此两边分别递归求即可。

最后对于求出的,乘上并对取模。

由于多项式乘法的复杂度是的,因此该算法的总复杂度为

还原转置

那么我们考虑多点求值的算法。

首先,我们操作是倒过来并且经过转置的。

其次,在算法过程中是常量(只和有关,和无关)。

当作输入,也就是说

首先让。注意,对求逆的过程是对常量求逆的过程,因此不需要转置,直接多项式求逆。

然后我们把上述分治算法倒过来并转置:

  • 如果,则是一个常数,直接返回即可(存储到数组上)。
  • 否则,设
    • 原本是,转置后就变成了:
    • 并且只需要保留前项,只需要保留前项。
    • 是不变的,因为是常量。实际上这个应该是预处理的。

算法在叶子处的值就是对应的点值。

该算法的时间复杂度仍是,但不用每次都多项式求逆,常数大大减小。

参考文献

QY 为什么可以 5e5 多点求值 (详细揭秘) - rqy

题解 P5050 【模板】多项式多点求值 - EI