Skip to content

稠密多项式表示

Dense polynomial representation · Coefficient-vector polynomial representation

按次数连续保存从常数项到最高次项全部系数的规范多项式编码。

条目类型
定义

形式陈述

R 是交换含幺环,非零多项式 fR[x] 的次数为 d。稠密表示把它编码成有限向量

dense(f)=(a0,a1,,ad),f(x)=i=0daixi,

包括中间所有为零的系数。为了使表示规范,要求末项 ad0;零多项式可约定为长度为零的向量,或唯一的单元素向量 (0),但一个实现必须固定其中一种约定。这样,次数由向量长度直接读出,系数查询是一次下标访问,两个次数至多为 d 的多项式相加只需逐项处理 d+1 个位置。

这里被编码的对象是形式多项式,不是其在某些点上的函数值。底层数组通常依次保存 a0,a1,,也可以反向保存以方便除法;方向不同不改变数学对象,却会改变截断、反转和内存扫描的接口。若每个环元素占一个存储单元,空间为 Θ(d+1);若系数是任意精度整数,还须把各系数的 bit 长度计入,而不能把整个数组的每项都当作常数成本。

直觉

稠密表示像一把从 0 次刻到 d 次的直尺:即使某个刻度上的系数为零,该位置仍然保留。因此“第 i 项在哪里”无需搜索,卷积、Horner 求值、求形式导数和长除法都能沿连续内存规则前进。算法分析中常写的 M(n),也正是以长度约为 n 的这类系数向量为基本输入,计算两个次数小于 n 的多项式乘积所需的环运算数。

连续位置还使分治切块十分自然。把长度 2m 的向量分成低半与高半,就得到

f(x)=f0(x)+xmf1(x),degf0,degf1<m.

Karatsuba、Toom–Cook 与基于变换的乘法都利用这一分解。不过“数组连续”只描述布局,不自动保证快速:若运算会产生巨大的整数系数,真正瓶颈可能是单个系数的乘法和内存分配,而不是数组下标。

例子与边界

多项式

f(x)=52x3+7x6

的规范稠密编码是 (5,0,0,2,0,0,7)。与 g(x)=1+x 相乘时,先把原向量复制到结果的相邻两段并相加:

fg=5+5x2x32x4+7x6+7x7,

所以结果数组为 (5,5,0,2,2,0,7,7)。这个计算展示了卷积中每个 ai 同时贡献到 cici+1,也说明内部零项并不会破坏统一循环。

规范化不可省略。向量 (2,3,0,0)(2,3) 表示同一形式多项式;若不删除尾随零,次数测试、除法终止条件与相等判断都会产生分歧。系数环有零因子时,乘积的最高项还可能消失,例如在 (Z/4Z)[x](2x)(2x)=0,因此不能无条件预分配为“次数恰好相加”后就跳过末尾归一化。

f=1+x109 时,稠密表示需要十亿零位,问题规模显然不应再按次数衡量;这正是稀疏多项式表示胜出的边界。反过来,一个看似稀疏的输入经过乘法后可能填满几乎所有次数,此时持续维护项表和哈希表反而比连续向量昂贵。表示选择必须依据非零项数、次数跨度与运算后的密度,而不是只看输入文件是否短。

推论与应用

稠密编码为多项式乘法提供统一的 M(n) 接口,也适合乘积树、快速多点求值以及多项式余式序列。它使“截断到模 xk”“反转前 k 项”“取低半系数”都成为明确的数组切片操作,从而把 Newton 反演和快速除法写成可实现的递推,而不只是形式恒等式。

在工程实现中还要区分逻辑长度与容量。频繁相乘若每次都按精确长度重新分配,会把线性搬运成本叠加到代数运算上;保留容量可以减少分配,但逻辑末尾仍须归一化。若系数是模素数机器字,可用平坦数组获得良好局部性;若系数是大整数,数组只保存对象引用时,空间估计还必须加入每个系数的独立存储。由此可见,稠密表示不是“多项式的唯一自然形态”,而是一套让次数范围成为主要规模参数的具体成本模型。

参考资料
  • Joachim von zur Gathen and Jürgen Gerhard, Modern Computer Algebra, 3rd ed., Cambridge University Press, 2013, Chs. 8–10.
  • Donald E. Knuth, The Art of Computer Programming, Vol. 2: Seminumerical Algorithms, 3rd ed., Addison–Wesley, 1997, §4.6.1.
  • Keith O. Geddes, Stephen R. Czapor, and George Labahn, Algorithms for Computer Algebra, Kluwer, 1992, Ch. 3.
关系图谱10 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系