转置原理与多点求值
转置原理
转置原理,或称特勒根原理(Tellegen’s Principle),指的是对于矩阵和向量,为优化计算,我们可以考察的计算方法。原因是设有分解,那么。
也就是说,如果有快速的计算方法,那么在原理上也一定拥有相同复杂度的算法。
多项式多点求值
多点求值(multi point evaluation),指的是给出多项式以及个横坐标,快速求出。目前已有的算法是通过多项式取模来实现。
注意到,多点求值本质上是对向量做一个线性变换:
这个矩阵是一个范德蒙德矩阵,记作。我们把矩阵转置一下得到
观察发现,转置后的变换,向量的第项求的是。写出它的生成函数,因此我们求的是
这个多项式的前项的系数(对取模)。这个东西可以分治多项式乘法计算。
那么我们把这个矩阵转置回去,就可以得到多点求值的算法。也就是说本质上我们可以把所有初等变换写下来,然后转置一下并反转这个操作序列,然后再照着做一遍,就得到了相同复杂度的多点求值做法。但是这个过于憨批,想必没人会去实现它。为此我们需要分析计算的过程中变换的转置变换是什么。
初等变换
本质上我们进行的变换有如下两种:
- 把变量乘一个常数,记作。
- 把变量乘加到变量上,记作。
注意,变量的交换可以使用上面两个操作完成。
它们的转置操作分别是
- 把变量乘一个常数,记作(不变)。
- 把变量乘加到变量上,记作。
这个大家可以写出初等变换矩阵,然后转置一下,自行验证。
多项式乘法
多项式乘法的变换过程是,给出多项式和,那么对于,有,其中。
我们设是一个常数多项式,而是输入。那么这个变换的转置就是:,其中。容易发现,这样求出的有项。我们记这个变换是。
这个可以倒过来 NTT 计算。
转置后的算法
接下来我们具体考虑求的算法。
设,那么我们可以先求出,然后再乘上即可。
求的过程可以分治计算:
如果,那么直接返回。
否则,设。
- 令,。
- 令,。
- 那么有,。因此两边分别递归求即可。
最后对于求出的,乘上并对取模。
由于多项式乘法的复杂度是的,因此该算法的总复杂度为。
还原转置
那么我们考虑多点求值的算法。
首先,我们操作是倒过来并且经过转置的。
其次,在算法过程中是常量(只和有关,和无关)。
把当作输入,也就是说。
首先让。注意,对求逆的过程是对常量求逆的过程,因此不需要转置,直接多项式求逆。
然后我们把上述分治算法倒过来并转置:
- 如果,则是一个常数,直接返回即可(存储到数组上)。
- 否则,设。
- 原本是,转置后就变成了:,。
- 并且只需要保留前项,只需要保留前项。
- 是不变的,因为是常量。实际上这个应该是预处理的。
算法在叶子处的值就是对应的点值。
该算法的时间复杂度仍是,但不用每次都多项式求逆,常数大大减小。
参考文献
修订记录
- 2020年5月28日 创建文章