You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已知多项式零点数组 如何以n log n复杂度计算其展开式系数

多项式零点转系数的高效实现方案

可以实现接近甚至达到你要求的n log n时间复杂度的转换,具体方案如下:

我们的目标是把给定零点数组a[0..n-1]对应的多项式 ∏(x - a[i]) 展开为幂次和的标准形式,你提到的朴素逐个乘一次式的方法时间复杂度为O(n²),在n较大时开销确实很高。

常用可落地实现方案(复杂度O(n log²n))

这个方案实际运行效率非常接近O(n log n),可以轻松处理n到10^5甚至更高规模的需求,实现逻辑如下:

  • 分治拆分:将当前处理的零点数组平均拆为左右两个子数组
  • 递归计算:分别递归展开两个子数组对应的多项式
  • 快速乘法:使用FFT(浮点域)或NTT(模质数域)快速计算两个子多项式的乘积,得到当前区间对应的展开多项式

以你给出的示例为例:

x² - 1 = (x + 1)(x - 1)

对应的零点数组为[1, -1],拆分后左数组对应多项式x - 1,右数组对应多项式x + 1,FFT相乘后直接得到标准形式的结果,和预期一致。

复杂度推导:递归总层数为log n,每一层所有多项式乘法的总运算量为O(n log n),因此总复杂度为O(n log²n),在绝大多数场景下已经足够使用。

严格O(n log n)的实现方案

如果你的运算场景是在支持N次原根的模数下(即做整数多项式运算模特定大质数),可以通过牛顿迭代结合多项式对数、指数运算的技巧实现严格O(n log n)的时间复杂度,但该方案实现难度较高,且适用范围有限,非特殊需求不需要使用。

注意事项

如果使用FFT实现快速乘法,要注意浮点精度误差的问题:如果最终系数是较大的整数,建议使用多模数NTT结合中国剩余定理合并结果,避免精度损失。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:24:01