一些关于多项式基底的思考

一些关于多项式基底的思考

常见的基

多项式常见的表示形式有 3 种:

  1. 普通幂:\(\sum a_ix^i\)
  2. 下降幂:\(\sum b_ix^{\underline i}\)
  3. 点值表示法(拉格朗日插值):\(\sum y_i\prod_{i\neq j}\dfrac{x-x_j}{x_i-x_j}\)

这里基的定义即线性空间中的定义,\(\{x^i\},\{x^{\underline i}\},\{\prod_{i\neq j}\dfrac{x-x_j}{x_i-x_j}\}\) 均可以张成多项式的线性空间。

下降幂多项式与基底转换

在推导中,记 \(c_i=b_ii!\),另一种下降幂多项式的形式是牛顿级数:\(\sum c_i\dbinom xi\)
下降幂与点值的关系非常密切。

下降幂与点值的转换

这里的点值指对于 \(n\) 次多项式,其 \([0,n]\) 的点值。

\(f_k=\sum_{i=0}^kc_i\dbinom k i=n!\sum_{i=0}^k\dfrac{c_i}{i!}\times \dfrac 1{(k-i)!}\),得到一个卷积形式。

即转点值仅需将 OGF \(\{b_i\}\) 卷上 \(\exp(x)\)
自然的,点值转下降幂只需卷上 \(\exp(-x)\) 即可。

复杂度为单次卷积,\(O(n\log n)\)

值得一提的是,通过高效的将下降幂多项式转成连续点值形式,我们容易完成下降幂多项式的卷积,沿袭普通幂的思路,转成点值做点乘再逆变换回下降幂即可,复杂度为 \(O(n\log n)\)

多项式前缀和与差分

定义多项式 \(g\)\(f\) 的前缀和,\(g\) 满足:\(g(n)=\sum_{i=0}^{n-1}f(i)\)
类似的,差分满足:\(g(n)=f(n+1)-f(n),n\ge 0\)

对于点值表示法,两者很好做,按照定义处理点值即可,容易做到 \(O(n)\)
对于下降幂多项式,一个直接的想法是转点值再转回来,有一个 \(O(n\log n)\) 的做法,但还不够好。

我们考虑直接对下降幂多项式做多项式前缀和,那么:

\[g(k)=\sum_{i=0}^{k-1}\sum_{j=0}^{n}c_j\dbinom i j\\ =\sum_{j=0}^{n}c_j\sum_{i=0}^{k-1}\dbinom i j\\ =\sum_{j=0}^{n}c_j\dbinom{k}{j+1} \]

可以观察到仅是将 \(c\) 向后平移了一位即可得到多项式前缀和的牛顿级数系数。

由于差分是前缀和的逆操作,改成把 \(c\) 向前平移一位即可得到多项式差分的牛顿级数系数。

时间复杂度 \(O(n)\)

下降幂与普通幂的转换

这是一个困难的问题,对于两者的互相转化,学术界目前没有低于 \(O(n\log^2n)\) 的做法。

两者都可以通过分治 NTT 做到 \(O(n\log^2n)\)
不过因为 NTT 寄了所以就鸽了。

但是两者转化的暴力 \(O(n^2)\) 做法还是需要掌握的。

普通幂转下降幂:

\[\sum_{i=0}^na_ix^i\\=\sum_{i=0}^na_i\sum_{j=0}^i{i\brace j}x^{\underline j}\\ =\sum_{j=0}^n(\sum_{i=j}^n{i\brace j}a_i)x^{\underline j} \]

下降幂转普通幂:

\[\sum_{i=0}^nb_ix^{\underline i}\\ =\sum_{i=0}^nb_i\sum_{j=0}^i{i\brack j}(-1)^{i-j}x^j\\ =\sum_{j=0}^n(\sum_{i=j}^n(-1)^{i-j}{i\brack j}b_i)x^j \]

普通幂与点值的转换

即多项式多点求值与多项式快速插值,也都只有 \(O(n\log^2n)\) 的困难做法。
虽然已经有了新时代的只需多项式求逆的多点求值做法,但是因为 NTT 死了,鸽

小结

从上述分析来看,下降幂多项式/牛顿级数的优越性在于其与点值的关系非常密切,一个重要的应用是做多项式前缀和非常方便。相较之下,普通幂在处理这类问题就要逊色许多,没有简单快速的做法。

posted @ 2022-10-08 22:21  juju527  阅读(324)  评论(0编辑  收藏  举报