算法记录 003:高斯消元算多项式乘法

实用算法 003:高斯消元算多项式乘法

众所周知ntt/fft是目前已知的时间复杂度最优的多项式乘法算法。

那为什么我们还需要知道这个方法呢?

考虑这个问题:

\(n\)个多项式\(p_1,p_2,p_3...p_n\)。和一个目标多项式\(q\),初始\(q=1\)

\(q\)次操作:\(mul\ i\)

表示令\(q=q\times p_i\)

最后输出\(q\)的前\(a\)次项系数。(保证乘法过程中大于a次项系数都为0)

直接fft/ntt时间复杂度为\(O(aq\log a)\)。但是fft/ntt的常数巨大,经常会TLE。

下面介绍一种小常数\(O(a^3+a\times q)\)的做法。

设最终的多项式\(q=\sum a_{i}\times x^i\)

我们若令\(x=1,2,3,4...a\),然后将\(x^i\)看作常数,\(a_i\)看作未知数,列出\(a\)个方程,然后高斯消元即可。可以发现最终的矩阵一定是非奇异的,所以方程一定存在唯一解。

适用范围:

乘法次数多,系数非0的项的个数比较少。

题目: cf917d

posted @ 2021-01-06 18:51  WWW~~~  阅读(127)  评论(0编辑  收藏  举报