Skip to content

快速多点求值

Fast multipoint evaluation · Multipoint polynomial evaluation

沿子乘积树递归取余,在准线性乘法代价上批量计算一般点集的多项式值。

条目类型
算法

形式陈述

输入交换环 R 上次数小于 n 的多项式 f 与点 u0,,un1R,输出

(f(u0),,f(un1)).

先为线性模数 xui 建立子乘积树。在根处令余式 rh,0=fmodMh,0;对每个内部结点递推

ri1,2j=ri,jmodMi1,2j,ri1,2j+1=ri,jmodMi1,2j+1.

到叶子时 r0,j 是常数。因为 fr0,j 可被 xuj 整除,余数定理给出 r0,j=f(uj)。若 n 不是二次幂,可以用不完全树或单位叶子平衡规模。

设乘法代价为 M(n),并可在 O(M(n)) 环运算内完成首一多项式的除余。每一层的被除式与模数总次数为 O(n),故下降成本为 O(M(n)logn);加上建树仍是同一量级。这个计数适用于任意交换环上的首一线性模数,因为长除法只除以 1;使用基于 Newton 反演的快速除法时,则另需满足其单位与截断接口。

直觉

Horner 法在一个点上只用 O(n) 次运算,但对 n 个无结构点独立执行会达到 O(n2)。快速多点求值不试图让单个点更便宜,而是先把点分组:一个次数约 n/2 的余式同时保留左半全部点的信息,原多项式中能被该半点集乘积整除的部分对这些点都没有影响。随后每次二分只保留下一层真正需要的余式。

这与数值采样的直觉不同。算法没有近似 f,也没有在点之间插值;每次取余都是精确同余变换。共享来自“多个求值同态的核包含一个共同乘积”,而不是点彼此靠近。点集可以完全不规则,因此它补足了 FFT 只擅长单位根或其他特殊结构点集的空缺。

例子与边界

f=x32x+5,(u0,u1,u2,u3)=(0,1,2,3).

左半模数为 ML=x(x1)=x2x。在该商中 x2xx3x,所以

fmodML=5x,

再模 xx15,4。右半模数 MR=(x2)(x3)=x25x+6;由 x25x6 可得 x319x30,因此

fmodMR=17x25,

2,3 处分别为 9,26。一次大余式计算由此服务两个点,下一层只处理一次多项式。

点可以重复,算法会正确地重复输出同一个值,但树中相同线性因子使工作没有减少,且不能直接转作普通插值。若 degf 远大于点数,应先在根模数下把 f 降次;若点数很少,建树的常数与内存可能超过逐点 Horner。复杂度按环运算计数也不控制整数系数膨胀,模数连乘后的系数可能很大,精确 bit complexity 需要另行估计。

另一个边界是数值稳定性。浮点系数上做快速除法和树状传播可能放大舍入误差;O(M(n)logn) 是精确代数模型的结论,不等价于任意点集上稳定的数值算法。Chebyshev 点、单位根等特殊点集有专门变换,通常同时拥有更好的常数或稳定性分析。

推论与应用

乘积树建好后,可以对多个多项式重复下降,摊薄点集预处理成本。把线性叶子换成一般首一模数,就得到 simultaneous modular reduction:一次把 f 化到多个商环中。这个接口又是快速 Chinese remainder 重构、快速 rational evaluation 和若干符号线性代数算法的组成部分。

乘积树快速插值使用同一批结点,但方向相反:先借一次多点求值得到根积导数在各点的值,再从叶子权重向上合并。两种算法共享数据结构,却不是把求值代码简单倒序;插值多出除以 M(ui) 的步骤,因此要求点差可逆,并有重复点与非域系数的额外边界。

参考资料
  • Joachim von zur Gathen and Jürgen Gerhard, Modern Computer Algebra, 3rd ed., Cambridge University Press, 2013, Ch. 10.
  • Robert T. Moenck and Allan Borodin, “Fast Modular Transforms,” Journal of Computer and System Sciences 8(3), 1974, pp. 366–386.
  • Alin Bostan and Éric Schost, “Polynomial Evaluation and Interpolation on Special Sets of Points,” Journal of Complexity 21(4), 2005, pp. 420–446.
关系图谱4 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系