Skip to content

稀疏多项式表示

Sparse polynomial representation · Term-list polynomial representation

只保存非零系数及其指数、以项数而非最高次数计量规模的多项式编码。

条目类型
定义

形式陈述

一元非零多项式可用有序项表

sparse(f)=((e1,a1),,(et,at)),f(x)=j=1tajxej,

表示,其中 aj0,指数满足 e1<<et;零多项式对应空表。排序、删除零系数并合并相同指数后,编码才是规范的。空间由非零项数 t、指数的 bit 长度和系数大小共同决定,典型字模型写成 O(t) 个记录,但若最高指数 D 不受机器字限制,仅记录指数就需 Θ(log(D+1)) bit。

同一形式延伸到多元多项式环 R[x1,,xn]:把指数 ej 换成向量 αjNn,每项为 (αj,aj)。为了做归并加法与首项运算,项表须按一个固定的单项式序排列;若只用哈希表存储,插入可以很快,但输出规范形式和寻找首项仍需排序或额外索引。这里的“稀疏”描述存储的支持集,不保证任何后续运算的结果仍然稀疏。

直觉

稀疏表示不铺设从 0 到最高次数的全部刻度,而只记录真正出现的坐标。对 1+x109,输入的数学信息只有两个系数和两个指数;按十亿长度扫描既没有增加正确性,也没有揭示新结构。把规模记为项数 t 后,求值可逐项快速幂,加法可像合并两个排序表那样进行,多元系统中的一个单项式则自然成为“指数向量加系数”的记录。

节省空间的代价是失去常数时间的任意系数定位。查找 xk 的系数需要二分、树索引或哈希;乘法会产生 tftg 个候选指数和,随后还要合并碰撞项。稀疏算法因此常把主要工作放在支持集的组合结构上,而稠密表示把主要工作放在连续次数范围上。二者的复杂度参数不同,不能只比较同一个大 O 符号中的字母。

例子与边界

f=2x10003x7+1,g=x1000+3x71.

各自只有三项。逐项相乘得到九个候选项;按指数合并后

fg=2x2000+3x1007x10009x14+6x71.

其中 x1000 的系数来自 2x1000+x1000,说明“生成候选项”与“得到规范结果”是两个不同阶段。若在特征为 3 的域上计算,3x10079x146x7 又全部消失;合并之后删除零项是代数正确性的一部分,而不是可选的压缩。

稀疏输入也可能迅速稠密化。几何和

(1+x++xm)(1+x++xm)

m+1 个输入项,却在 02m 的每个次数上都非零;若仍用树结点逐项维护,比较与分配成本会压过数组卷积。相反,(1+xD)k 只有 k+1 个可能次数,在 D 极大而 k 较小时继续使用稀疏表更合理。所谓稀疏乘法没有只由输入项数决定的普遍输出界,因为不同指数和可能全部互异,也可能大量碰撞。

推论与应用

稀疏表示适合超高次数少项式、符号展开中的中间表达式和多元 Gröbner 基计算。多元算法频繁询问首单项式、最小公倍单项式与可整除项,因此有序项表、堆和哈希表常被组合使用:哈希负责合并相同指数,优先结构负责按单项式序取出当前最大项。F4 算法进一步把许多稀疏项对齐成 Macaulay 矩阵的列,说明“多项式稀疏”与“矩阵消元时仍稀疏”是两个需要分别测量的事实。

表示还影响输入规模的理论定义。若指数以二进制编码,x2n1 的文本长度是 O(n),而把它展开成连续系数需要指数空间;因此某个对次数 D 多项式时间的稠密算法,对稀疏编码长度未必是多项式时间。反过来,许多快速变换算法要求完整系数向量,先把项表稠密化可能正是合适的预处理。可靠实现通常根据预计输出密度设阈值切换表示,并在切换时重新规范化,而不是让两种编码在同一对象中长期并存。

参考资料
  • Joachim von zur Gathen and Jürgen Gerhard, Modern Computer Algebra, 3rd ed., Cambridge University Press, 2013, Chs. 8–9.
  • David A. Cox, John Little, and Donal O’Shea, Ideals, Varieties, and Algorithms, 4th ed., Springer, 2015, Ch. 2.
  • Keith O. Geddes, Stephen R. Czapor, and George Labahn, Algorithms for Computer Algebra, Kluwer, 1992, §§3.1–3.3.
关系图谱4 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:使用

类型化关系