Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

译自 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)相乘的。

这提示了如下快速多项式乘法的策略:

  1. 在全部 个点处对多项式求值;
  2. 在求值表示中执行快速逐点乘法();
  3. 转换回系数表示。

现在的挑战是如何高效地 求值(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)

给定一个处于求值表示下的多项式

我们可以在拉格朗日基下重构它的系数形式:

其中

参考文献


  1. Dasgupta, S., Papadimitriou, C. H., & Vazirani, U. V. (2008). "Algorithms" (ch. 2). New York: McGraw-Hill Higher Education.

  2. 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

  3. Berrut, J. and Trefethen, L. (2004). "Barycentric Lagrange Interpolation."