Skip to content

算法Algorithm

Berlekamp 多项式因式分解算法

施工中 · 内容逐步修订

Berlekamp factorization algorithm · Berlekamp polynomial factorization

计算有限域商代数的 Frobenius 不动子空间,并以 GCD 从中确定性分离不可约因子。

形式陈述 ​

输入为有限域 Fq 上首一、平方自由多项式 f,deg⁡f=n≥1。常数输入 1 另返回空因子列表;零多项式不属于此分解接口。在商代数

A=Fq[x]/(f)

中,Frobenius 映射 F(h)=hq 是 Fq-线性的。以 1,x,…,xn−1 为基,构造 n×n 的 Berlekamp 矩阵 Q:第 j 列是 xqjmodf 的系数向量。于是

B=ker⁡(Q−I)={h∈A:hq=h}.

若 f=f1⋯fr 是互异首一不可约因子的乘积,中国剩余定理给出

A≅∏i=1rFq[x]/(fi),B≅Fqr,

故 dimFq⁡B=r。对矩阵 Q−I 作精确行化简得到零空间基后,对非恒定 h∈B 与 a∈Fq 求

gcd(f,h−a).

在各不可约分量上 h 取某个基域常数,因此这些 GCD 把取相同常数的分量聚在一起。对每个基向量、每个 a∈Fq,遍历当前因子 g 并求 gcd(g,h−a);只用真因子将 g 切成该 GCD 与互补商,结果为 1 或 g 时保持该块不变。若两个不同不可约分量在每个基向量上标签都相同,它们在整个 B≅Fqr 上也相同,矛盾。因此枚举全部基向量必将所有分量分开;得到 r 个因子时即可停止。

输入若非平方自由,应先做平方自由分解。有重复因子时,商环会含幂零元,不能直接把“得到 r 块”解释成不可约分解。不过不动空间的维数仍等于不同不可约因子的数目:在局部环 Fq[x]/(pe) 中,若 hq=h,其模 p 的像是某个 c∈Fq;h−c 既幂零又满足 (h−c)q=h−c,反复取 q 次幂便迫使它为零。因此该局部不动空间仍恰为常数域,分裂得到的却可能是不可约因子的幂。

直觉

Berlekamp 算法没有逐个试除不可约多项式,而是寻找在 Frobenius 下不动的“标签函数”。在每个不可约因子对应的扩域分量中,满足 zq=z 的元素恰是基域 Fq;所以一个不动元素相当于给每个未知因子贴上一个域元素标签。计算 gcd(f,h−a) 就把标签为 a 的分量一次取出。

关键工作由有限维线性代数完成。模 f 把任意幂压回 n 维空间,Frobenius 的不动条件变成齐次线性方程;零空间维数不仅指导分裂,还直接告诉算法共有多少个互异不可约因子。这种结构尤其适合 q 固定而 n 增长的场景,因为所有域元素都可枚举,确定性地尝试 a 不会改变关于 n 的多项式性。

Frobenius 不动子空间与因子分裂
例子与边界

在 F2[x] 中取

f=x3+1=(x+1)(x2+x+1).

f′=x2,与 f 互素,所以输入平方自由。以 (1,x,x2) 为基,平方映射给出

1↦1,x↦x2,x2↦x4≡x(modf).

因此

Q=(100001010),

ker⁡(Q−I) 由 1 与 h=x+x2 张成,维数 2 预告两个因子。实际计算

gcd(f,h)=gcd(x3+1,x+x2)=x+1,

商即 x2+x+1。每个输出都通过精确除法验证,零空间本身没有“猜中因子”的概率。

复杂度声明必须保留 q。经典确定性版本需枚举 a∈Fq 并做稠密 n×n 线性代数;在固定 q 时它关于 n 为多项式时间,按本页逐基向量、逐常数细化的直接实现,可给出保守上界 O(n2log⁡q+qn3) 次域运算,但 q 若以 log⁡q bit 输入,这个枚举对输入长度是指数依赖。不能把“有限域上的多项式时间”省略成对 n,log⁡q 都多项式。

具体地,先以重复平方求 z=xqmodf,朴素成本 O(n2log⁡q);再依次乘 z 得到各列,共 O(n3)。行化简也是 O(n3)。至多 n 个基向量各枚举 q 个常数,每次对当前因子做普通除余和 GCD;这些因子的次数和至多 n,一次细化的保守预算为 O(n2),给出上述界。扩域的表示和每次域运算的 bit 成本仍须另计。大 n 时矩阵可稀疏开始却在消元中变稠密;非首一输入需先除首项,首项为零或底环不是域时则没有这一操作。零空间维数为 1 只在输入已平方自由的前提下才证明 f 不可约。

推论与应用

Berlekamp 不动子空间给出了一个很强的可检验证书:零空间基、各次 GCD 与最终乘积足以复核分解。算法还展示 Frobenius、Chinese remainder 与线性代数如何协作,把非线性的“找因子”问题转成求核再分组。编码理论和有限域构造中的小特征多项式因此常直接采用此路线。

Cantor–Zassenhaus 算法通常先按不可约因子次数分组,再用随机幂与 GCD 做等次数分裂;它是 Las Vegas 算法,避免经典 Berlekamp 对全部 q 个常数的确定性扫描,在大域上更合适。两者不是“一个永远更快”:小固定域、需要完全确定性或已有高效线性代数时,Berlekamp 仍然自然;大 q 和高次数时,随机分裂及其现代变体往往占优。比较时应同时报告域大小编码、矩阵算法与随机性口径。

稠密矩阵及其零空间基合计需要 O(n2) 个域元素槽位;域元素的具体表示位数另计。

若输入来自一个首一整数多项式的模 p 约化,这里的因子表还可作为p-adic互素因子提升的起点。先把相同不可约因子的全部重数放在同一块,保证不同块彼此互素,再提升其系数;单块内部不必平方自由。提升在 Zp[X] 中输出因子,不会自动证明这些因子具有有理数系数,也不能在含零因子的 Z/pNZ 上原样调用本页的有限域矩阵算法。

参考资料
  • Elwyn R. Berlekamp, “Factoring Polynomials over Finite Fields,” Bell System Technical Journal 46(8), 1967, pp. 1853–1859.
  • Elwyn R. Berlekamp, “Factoring Polynomials over Large Finite Fields,” Mathematics of Computation 24(111), 1970, pp. 713–735.
  • Joachim von zur Gathen and Jürgen Gerhard, Modern Computer Algebra, 3rd ed., Cambridge University Press, 2013, chapter on factoring polynomials over finite fields.
关系图谱14 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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