“算法先建子乘积树得到 $M$,求形式导数 $M'$,再调用快速多点求值一次得到全部 $M'(u i)$。叶子权重置为 $c i=y i/M'(u i)$,局部多项式初值为 $F i=c i$…”
形式陈述
给定
先为线性模数
到叶子时
设乘法代价为
直觉
Horner 法在一个点上只用
这与数值采样的直觉不同。算法没有近似
例子与边界
取
左半模数为
再模
在
点可以重复,算法会正确地重复输出同一个值,但树中相同线性因子使工作没有减少,且不能直接转作普通插值。若输入次数
另一个边界是数值稳定性。浮点系数上做快速除法和树状传播可能放大舍入误差;
推论与应用
乘积树建好后,可以对多个多项式重复下降,摊薄点集预处理成本。把线性叶子换成一般首一模数,就得到 simultaneous modular reduction:一次把
乘积树快速插值使用同一批结点,但方向相反:先借一次多点求值得到根积导数在各点的值,再从叶子权重向上合并。两种算法共享数据结构,却不是把求值代码简单倒序;插值多出除以
参考资料
- 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.