概览
本节介绍多项式的两种基本表示方法——系数表示(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 多项式乘法的转换策略
核心思想是利用两种表示各自的优势:
具体步骤:
- 求值(Evaluation):将 和 从系数表示转换为点值表示
- 逐点相乘(Pointwise multiplication):在相同的 个点上,
- 插值(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:点值表示下的多项式乘法
已知 和 在 处的点值表示分别为:
求 在相同点上的点值表示。
解答
逐点相乘:
的点值表示为 。
注意: 的 degree-bound 为 (两个 degree-bound 为 的多项式之积),但这里只有 个点值对,不足以唯一确定 。要完整恢复 的系数表示,需要 个点值对。
习题 3:拉格朗日插值
利用拉格朗日插值公式,从点值表示 恢复多项式 的系数表示。
解答
使用拉格朗日插值公式 。
计算各基多项式:
因此:
验证:,,。
习题 4:范德蒙德矩阵与唯一性
给定求值点 ,写出范德蒙德矩阵 ,计算 ,并说明为什么这保证了点值表示的唯一性。
解答
范德蒙德矩阵为:
行列式为:
由于 ,矩阵 非奇异,方程组 对任意 都有唯一解。这意味着任意给定 个值 ,都存在唯一的 degree-bound 为 的多项式通过 。
视频学习指南
| 资源 | 链接 | 说明 |
|---|---|---|
| MIT 6.046J Lecture 9 | YouTube | Erik Demaine 讲解多项式乘法与 FFT |
| 3Blue1Brown: But what is the Fourier Transform? | YouTube | 傅里叶变换的直觉理解 |
| reducible: FFT | YouTube | FFT 的可视化讲解,从多项式乘法动机出发 |
| Andrej Karpathy: Neural Networks: Zero to Hero | YouTube | 从信号处理角度理解 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
- 前置知识:4.1 矩阵乘法(多项式乘法与卷积的矩阵视角)、第29章_线性规划-章节汇总(前一章内容)
- 同章笔记:30.2 DFT与FFT、30.3 高效FFT实现
- 章节汇总:第30章_多项式与FFT-章节汇总
- 关联概念:分治法、主定理