一些关于多项式基底的思考
一些关于多项式基底的思考
常见的基
多项式常见的表示形式有 3 种:
- 普通幂:\(\sum a_ix^i\)
- 下降幂:\(\sum b_ix^{\underline i}\)
- 点值表示法(拉格朗日插值):\(\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)\) 的做法,但还不够好。
我们考虑直接对下降幂多项式做多项式前缀和,那么:
可以观察到仅是将 \(c\) 向后平移了一位即可得到多项式前缀和的牛顿级数系数。
由于差分是前缀和的逆操作,改成把 \(c\) 向前平移一位即可得到多项式差分的牛顿级数系数。
时间复杂度 \(O(n)\)。
下降幂与普通幂的转换
这是一个困难的问题,对于两者的互相转化,学术界目前没有低于 \(O(n\log^2n)\) 的做法。
两者都可以通过分治 NTT 做到 \(O(n\log^2n)\)。
不过因为 NTT 寄了所以就鸽了。
但是两者转化的暴力 \(O(n^2)\) 做法还是需要掌握的。
普通幂转下降幂:
下降幂转普通幂:
普通幂与点值的转换
即多项式多点求值与多项式快速插值,也都只有 \(O(n\log^2n)\) 的困难做法。
虽然已经有了新时代的只需多项式求逆的多点求值做法,但是因为 NTT 死了,鸽。
小结
从上述分析来看,下降幂多项式/牛顿级数的优越性在于其与点值的关系非常密切,一个重要的应用是做多项式前缀和非常方便。相较之下,普通幂在处理这类问题就要逊色许多,没有简单快速的做法。