译自 halo2 book:background/polynomials.md
多项式(polynomial)
设 是 上以形式不定元(formal indeterminate) 表示的多项式。举例来说,
定义了一个 次多项式。 称为常数项(constant term)。 次多项式有 个系数。我们常常想要计算把形式不定元 替换成某个具体值 的结果,记作 。
在数学中这通常被称为"在点 处求值 "。这里"点(point)"一词源自多项式 形式的几何用法,其中 是二维空间中某点的坐标。然而,我们处理的多项式几乎总是被约束为等于零,并且 将是 某个域的元素。这不应与 椭圆曲线(elliptic curve) 上的点混淆,我们也会用到椭圆曲线,但绝不会在多项式求值的语境中使用。
重要说明:
- 多项式相乘产生的乘积多项式,其次数是各因子次数之和。多项式除法则从次数中作减法。
- 给定一个 次多项式 ,如果我们在不同的点上得到该多项式的 个求值,那么这些求值就完美地确定了该多项式。换言之,给定这些求值,我们可以通过多项式插值(interpolation)得到唯一的 次多项式 。
- 是多项式 的 系数表示(coefficient representation)。等价地,我们可以使用它在 个不同点上的 求值表示(evaluation representation) 两种表示都唯一地确定同一个多项式。
(旁注)霍纳法则(Horner's rule)
霍纳法则允许高效地求一个 次多项式的值,只需 次乘法和 次加法。它就是下面这个恒等式:
快速傅里叶变换(Fast Fourier Transform, FFT)
FFT 是在多项式的系数表示与求值表示之间转换的一种高效方法。它在 次单位根 处对多项式求值,其中 是本原 次单位根。通过利用单位根中的对称性,FFT 的每一轮都把求值问题缩减为一个只有原来一半大小的问题。最常见的是,我们使用长度为 2 的某个幂次 的多项式,并递归地应用这个减半缩减。
动机:快速多项式乘法
在系数表示下,把两个多项式相乘 需要 次运算:
其中第一个多项式中的 项每一项都必须乘以第二个多项式的 项。
然而在求值表示下,多项式乘法只需要 次运算:
其中每个求值是逐点(pointwise)相乘的。
这提示了如下快速多项式乘法的策略:
- 在全部 个点处对多项式求值;
- 在求值表示中执行快速逐点乘法();
- 转换回系数表示。
现在的挑战是如何高效地 求值(evaluate) 和 插值(interpolate) 多项式。朴素地说,在 个点处对一个多项式求值需要 次运算(我们在每个点处使用 的霍纳法则):
为方便起见,我们将上述矩阵记为:
( 被称为 的 离散傅里叶变换(Discrete Fourier Transform); 也称为 范德蒙德矩阵(Vandermonde matrix)。)
(基-2)Cooley-Tukey 算法
我们的策略是把一个大小为 的 DFT 分成两个交织(interleaved)的大小为 的 DFT。给定多项式 我们把它拆分成偶次项和奇次项:
为恢复原始多项式,我们做
在点 和 ()上试一下,我们开始注意到一些对称性:
注意我们只在半个定义域 (减半引理)上对 和 求值。这给了我们重构 在整个定义域 上所需的所有项:这意味着我们已经把一个长度为 的 DFT 转换成了两个长度为 的 DFT。
我们选择 为 2 的某个幂次(必要时通过补零),并递归地应用这个分治策略。由主定理(Master Theorem)1,这给了我们一个具有 次运算的求值算法,也就是快速傅里叶变换(FFT)。
逆 FFT(Inverse FFT)
至此我们已经对多项式求了值并逐点相乘。剩下的就是把乘积从求值表示转换回系数表示。为此,我们只需对求值表示再调用一次 FFT。不过这一次我们还要:
- 在范德蒙德矩阵中把 替换为 ,并且
- 把最终结果乘以一个因子 。
换言之:
(要理解逆 FFT 为何与 FFT 形式相似,请参阅 2 的 Slide 13-1。下图同样取自 2。)

Schwartz-Zippel 引理
Schwartz-Zippel 引理非形式地指出"不同的多项式在大多数点上都不同"。形式上,它可以写成如下:
设 是一个 元、次数为 的非零多项式。设 是一个至少含有 个元素的有限数集。如果我们从 中随机选取 ,那么
在我们熟悉的单变量情形 下,这归结为:一个 次非零多项式至多有 个根。
Schwartz-Zippel 引理用于多项式相等性测试。给定两个多变量多项式 和 ,次数分别为 ,我们可以对随机的 测试是否 ,其中 的大小至少为 如果两个多项式相同,这将永远成立;而如果两个多项式不同,那么等式成立的概率至多为 。
消失多项式(Vanishing polynomial)
考虑以本原单位根 生成的 阶乘法子群 。对所有 我们有 换言之, 的每个元素都满足方程
也就是说每个元素都是 的根。我们称 为 上的 消失多项式(vanishing polynomial),因为它在 的所有元素上求值都为零。
这在检查多项式约束时尤其方便。例如,要检查 在 上成立,我们只需检查 是 的某个倍数。换言之,如果把我们的约束除以消失多项式仍然得到某个多项式 我们就确信 在 上成立。
拉格朗日基函数(Lagrange basis functions)
TODO:(简要地)解释一般意义上的基(basis)是什么。
多项式通常用单项式基(monomial basis)书写(例如 )。然而,当在 阶乘法子群上工作时,我们发现用拉格朗日基(Lagrange basis)表达更为自然。
考虑以本原单位根 生成的 阶乘法子群 。对应于这个子群的拉格朗日基是一组函数 ,其中
我们可以更紧凑地写成 其中 是克罗内克 delta 函数(Kronecker delta function)。
现在,我们可以把多项式写成拉格朗日基函数的线性组合,
这等价于说 在 处求值为 ,在 处为 ,在 处为 依此类推。
当在乘法子群上工作时,拉格朗日基函数有一种便利的稀疏表示,形如
其中 是重心权重(barycentric weight)。(要理解这个形式是如何推导出来的,请参阅 3。)对于 我们有 。
假设我们给定了一组求值点 。由于我们不能假定这些 构成一个乘法子群,我们也考虑一般情形下的拉格朗日多项式 。那么我们可以构造:
这里,每个 都会产生一个为零的分子项 使得整个乘积求值为零。另一方面, 会在每一项处求值为 ,导致整体乘积为一。这就在集合 上给出了所需的克罗内克 delta 行为 。
拉格朗日插值(Lagrange interpolation)
给定一个处于求值表示下的多项式
我们可以在拉格朗日基下重构它的系数形式:
其中
参考文献
-
Dasgupta, S., Papadimitriou, C. H., & Vazirani, U. V. (2008). "Algorithms" (ch. 2). New York: McGraw-Hill Higher Education. ↩
-
Golin, M. (2016). "The Fast Fourier Transform and Polynomial Multiplication" [lecture notes], COMP 3711H Design and Analysis of Algorithms, Hong Kong University of Science and Technology. ↩ ↩2
-
Berrut, J. and Trefethen, L. (2004). "Barycentric Lagrange Interpolation." ↩