概览

本节介绍多项式的两种基本表示方法——系数表示(coefficient representation)与点值表示(point-value representation),并分析它们对多项式运算(尤其是乘法)效率的深刻影响。系数表示下多项式乘法需要 时间,而通过”系数→点值→逐点相乘→插值→系数”的策略,借助 快速傅里叶变换(FFT) 可将乘法降至 。本节是理解整个 FFT 算法体系的基石。


知识结构总览

flowchart TD
    A["多项式 A(x)"] --> B["系数表示"]
    A --> C["点值表示"]

    B --> B1["A(x) = Σ aⱼxʲ"]
    B --> B2["加法: Θ(n)"]
    B --> B3["乘法: Θ(n²)"]
    B --> B4["求值: Θ(n²)(Horner法 Θ(n))"]

    C --> C1["{(x₀,y₀), ..., (xₙ₋₁,yₙ₋₁)}"]
    C --> C2["加法: Θ(n)"]
    C --> C3["乘法: Θ(n)"]
    C --> C4["插值回系数: Θ(n²)"]

    B3 -->|"转换策略"| D["系数 → 点值(求值)"]
    D -->|"FFT"| D1["Θ(n lg n)"]
    C3 -->|"逐点相乘"| E["点值 → 系数(插值)"]
    E -->|"逆FFT"| E1["Θ(n lg n)"]

    D1 --> F["FFT乘法总代价: Θ(n lg n)"]
    E1 --> F

    style A fill:#e1f5fe
    style F fill:#c8e6c9
    style D1 fill:#fff9c4
    style E1 fill:#fff9c4

核心思想

2.1 多项式的基本概念

多项式(polynomial)是代数学中最基本的对象之一。一个 degree-bound 为 的多项式 可以写成如下形式:

其中 系数(coefficients),取自某个域(如实数域 或复数域 )。系数向量 完全确定了该多项式。

degree-bound

给定多项式 ,我们称 为该多项式的 degree-bound(度上界)。它表示系数下标的取值范围是 ,即多项式的最高可能次数。degree-bound 与多项式的(degree,即最高非零系数对应的幂次)不同——当 时,度严格小于 degree-bound。

degree-bound 与 degree 的区别

  • degree(度):多项式中最高次非零项的幂次。例如 的 degree 为
  • degree-bound(度上界):系数向量的长度,即 。即使 ,degree-bound 仍然是

degree-bound 的概念在后续 FFT 算法中至关重要,因为我们需要对多项式进行零填充(zero-padding),使两个 degree-bound 为 的多项式乘积的 degree-bound 恰好为

2.2 系数表示

系数表示(coefficient representation)是最自然的表示方式:直接存储多项式的系数向量。

系数表示下的运算复杂度

运算复杂度说明
加法 逐系数相加
乘法 每对系数交叉相乘
在一点求值 (Horner 法则)

Horner 法则(Horner’s rule)是高效求值的经典方法。将多项式重写为嵌套形式:

这样只需要 次乘法和 次加法,即 时间。

系数表示下乘法的瓶颈:两个 degree-bound 为 的多项式相乘,乘积的 degree-bound 为 。乘积的第 个系数为:

这个公式正是离散卷积(discrete convolution)的定义。计算所有 个系数需要 次乘法——当 很大时(如密码学中 可达数万),这个代价是不可接受的。

2.3 点值表示

点值表示(point-value representation)用 个不同的点上的取值来表示一个 degree-bound 为 的多项式:

其中 互不相同的求值点(sample points),

点值表示下的运算复杂度

运算复杂度说明
加法 在相同点上逐点相加
乘法 在相同点上逐点相乘
求值(已存储)直接读取对应

点值表示下乘法从 降到了 ,这是巨大的效率提升。但问题在于:如何将系数表示转换为点值表示(求值),以及如何将点值表示转换回系数表示(插值)?

2.4 唯一性定理

定理 30.1(点值表示的唯一性)

对于任意 个互不相同的点 和任意 个值 ,存在唯一一个 degree-bound 为 的多项式 ,使得对所有 ,有

证明

将条件 展开为线性方程组:

,其中 范德蒙德矩阵(Vandermonde matrix)。

【关键词(范德蒙德矩阵非奇异)】:范德蒙德矩阵的行列式为:

由于所有 互不相同,每个因子 ,因此 。这意味着 非奇异矩阵(nonsingular matrix),方程组 有唯一解

因此, 个点值对唯一确定一个 degree-bound 为 的多项式。

这个定理保证了两种表示之间的等价性:系数表示和点值表示包含完全相同的信息量,只是信息的组织方式不同。

2.5 多项式乘法的转换策略

核心思想是利用两种表示各自的优势:

具体步骤

  1. 求值(Evaluation):将 从系数表示转换为点值表示
  2. 逐点相乘(Pointwise multiplication):在相同的 个点上,
  3. 插值(Interpolation):将 的点值表示转换回系数表示

复杂度分析

步骤朴素方法FFT 加速
求值(
逐点相乘
插值(
总计

FFT 的关键在于:选择单位根(roots of unity)作为求值点,利用其特殊的代数结构,通过 分治法 将求值和插值过程从 优化到 。这正是 30.2 DFT与FFT 的核心内容。

2.6 拉格朗日插值公式

拉格朗日插值(Lagrange interpolation)给出了一种显式的插值公式,将点值表示转换回系数表示:

其中 是第 拉格朗日基多项式(Lagrange basis polynomial):

基多项式的关键性质

这保证了 ,即插值多项式确实通过所有给定的点。

拉格朗日插值的复杂度:直接计算需要 时间(每个基多项式需要 ,共 个基多项式),这与直接求解范德蒙德方程组的复杂度相同。要实现 的插值,需要借助 FFT 和单位根的特殊性质。

2.7 具体数值示例

的乘法为例,完整演示两种表示下的乘法过程。

系数表示

degree-bound ,乘积的 degree-bound 为 。通过卷积计算乘积系数:

逐步计算:

因此:

点值表示演示(选取 4 个求值点):

选取

求值:

求值:

逐点相乘得到 的点值表示:

验证:将 代入各点:

所有点值一致,验证了乘法的正确性。注意:这里我们只用了 4 个点,但乘积 的 degree-bound 是 ,要唯一确定 需要 8 个点值对。在实际的 FFT 方案中,我们会选择 个求值点(通常是 8 次单位根)。


补充理解

多项式在信号处理中的应用

多项式乘法与数字信号处理(Digital Signal Processing, DSP)有着深刻的联系。在信号处理中,一个离散信号可以表示为多项式的系数序列,而信号的卷积(convolution)恰好对应多项式乘法。

具体而言,有限长信号 与滤波器 的线性卷积定义为:

这正是多项式 乘积的系数公式。FFT 在信号处理中的核心应用包括:

  • 频谱分析:通过 DFT 将时域信号转换为频域表示,分析信号的频率成分
  • 快速滤波:利用卷积定理 ,将时域卷积转化为频域逐点相乘
  • 音频压缩(MP3)、图像压缩(JPEG)、音高识别等均依赖 FFT 的高效计算

可以说,理解多项式乘法是理解现代数字信号处理的数学基础。

拉格朗日插值的数值稳定性

拉格朗日插值虽然形式优美,但在实际数值计算中存在严重的稳定性问题

龙格现象(Runge’s phenomenon):当使用等距节点(equally spaced nodes)对某些光滑函数进行高次多项式插值时,插值多项式在区间端点附近会出现剧烈的振荡(oscillation)。经典例子是对 上进行等距插值——随着次数 增大,端点附近的误差反而趋于无穷。

解决方案

  • 使用切比雪夫节点(Chebyshev nodes):,这些节点在端点附近更密集,能有效抑制振荡
  • 采用样条插值(spline interpolation):用分段低次多项式代替全局高次多项式
  • 使用牛顿插值(Newton interpolation)的差商形式,便于递推添加新节点

在算法导论的 FFT 语境中,我们使用的是单位根作为求值点,这些点均匀分布在复平面单位圆上,配合 FFT 的代数结构,不存在龙格现象的问题。

多项式乘法与大整数乘法的关系

多项式乘法算法可以直接应用于大整数乘法,这是计算数论和密码学中的核心问题。

基本思路:将一个 位十进制整数 表示为以 (或 ,其中 为字长)为基底的多项式:

两个大整数的乘积就对应两个多项式在 处的求值之积。通过 FFT 加速多项式乘法,可以将大整数乘法从 降至

Schönhage-Strassen 算法(1971):利用数论变换(Number Theoretic Transform, NTT)在有限域上实现 FFT,避免了浮点精度问题,复杂度为 。该算法长期是实际最快的大整数乘法算法,被 GMP(GNU Multiple Precision Arithmetic Library)广泛采用。

后续进展:2007 年 Fürer 算法达到 ;2019 年 Harvey 和 van der Hoeven 最终实现了 的大整数乘法,证明了 Schönhage 和 Strassen 在 1971 年提出的猜想。

卷积定理(Convolution Theorem)

卷积定理是连接多项式乘法与傅里叶变换的桥梁,也是 FFT 加速多项式乘法的理论基础。

定理(卷积定理):设 是长度为 的向量, 表示离散傅里叶变换(DFT), 表示逆 DFT, 表示逐点相乘(Hadamard 积), 表示循环卷积,则:

等价地:

直观理解:时域(或系数域)中的卷积运算,等价于频域(或点值域)中的逐点相乘。这正是本节”系数→点值→逐点相乘→插值→系数”策略的数学本质。

注意:DFT 直接计算的是循环卷积(circular convolution),而多项式乘法对应的是线性卷积(linear convolution)。要使用 DFT 计算多项式乘法,需要先将两个多项式零填充(zero-pad)到长度 ,使线性卷积等价于循环卷积。这一细节将在 30.2 DFT与FFT 中详细讨论。


易混淆点

degree 与 degree-bound 的区别

  • degree(度):多项式中最高次非零项的幂次。例如 的 degree 为
  • degree-bound(度上界):系数向量的长度 ,即系数下标的取值范围是 。即使 ,degree-bound 仍为

在 CLRS 中统一使用 degree-bound 来描述多项式,这是因为算法的复杂度取决于系数向量的长度,而非实际度数。两个 degree-bound 为 的多项式相乘,乘积的 degree-bound 为 (需要零填充),无论实际度数是多少。

系数表示唯一 vs 点值表示不唯一

  • 系数表示是唯一的:给定 degree-bound ,系数向量 与多项式一一对应。
  • 点值表示取决于求值点的选取:同一多项式在不同求值点集上产生不同的点值对。例如 上都是合法的点值表示,但它们看起来完全不同。

定理 30.1 保证的是:给定固定的 个互不相同的求值点和 个值,存在唯一的多项式通过这些点。但不同的求值点集对应不同的点值表示,它们表示的可能是同一个多项式。

插值与曲线拟合的区别

  • 插值(interpolation):要求多项式精确通过所有给定的数据点。当数据点数为 时,使用 degree-bound 为 的多项式可以精确通过所有点(定理 30.1)。
  • 曲线拟合/回归(curve fitting / regression):当数据点很多或含有噪声时,不要求多项式精确通过每个点,而是寻找一个低次多项式最小化某种误差度量(如最小二乘法)。

在本节的语境中,我们只讨论插值问题。插值要求点数等于 degree-bound,而曲线拟合通常在点数远大于多项式度数时使用。


习题精选

习题 1:系数表示与点值表示的转换

给定多项式 ,求其在 处的点值表示。

习题 2:点值表示下的多项式乘法

已知 处的点值表示分别为:

在相同点上的点值表示。

习题 3:拉格朗日插值

利用拉格朗日插值公式,从点值表示 恢复多项式 的系数表示。

习题 4:范德蒙德矩阵与唯一性

给定求值点 ,写出范德蒙德矩阵 ,计算 ,并说明为什么这保证了点值表示的唯一性。


视频学习指南

资源链接说明
MIT 6.046J Lecture 9YouTubeErik Demaine 讲解多项式乘法与 FFT
3Blue1Brown: But what is the Fourier Transform?YouTube傅里叶变换的直觉理解
reducible: FFTYouTubeFFT 的可视化讲解,从多项式乘法动机出发
Andrej Karpathy: Neural Networks: Zero to HeroYouTube从信号处理角度理解 FFT

教材原文

CLRS 第4版 30.1节

A polynomial of degree-bound is a function of the form

We call the values the coefficients of the polynomial. A polynomial is represented by its coefficients.

The point-value representation of a polynomial of degree-bound is a set of point-value pairs

such that for , we have .

The product of two polynomials and of degree-bound is a polynomial of degree-bound such that for all .


参见Wiki


第30章-多项式与FFT 多项式表示