计算O(n log n)时间平方的稀疏多项式之和?


18

假设我们最多有阶数的多项式,,使得非零系数的总数为(即,多项式是稀疏的)。我对用于计算多项式的高效算法感兴趣: n n > m np1,...,pmnn>mn

∑ipi(x)2

由于此多项式的次数最多,因此输入和输出大小均为。在的情况下,我们可以在时间使用FFT计算结果。可以对任何进行此操作吗?如果有什么不同,我对系数为0和1的特殊情况感兴趣,应该对整数进行计算。O (n )m = 1 O (n log n )m < n2nO(n)m=1O(nlog⁡n)m<n

更新。我意识到,针对上述问题的快速解决方案将意味着快速矩阵乘法的发展。特别是,如果那么我们可以读取作为系数在。因此,计算对应于计算两个向量的外积,并且计算和对应于计算矩阵乘积。如果存在使用时间来计算的解决方案那么我们可以在时间中将两个 -n矩阵相乘 a i k b k j x i + n j p k(x )2 p k(x )2 ∑ k p k(x )2 n ,pk(x)=∑i=1naikxi+∑j=1nbkjxnjaikbkjxi+njpk(x)2pk(x)2∑kpk(x)2∑ k p k(f(n,m) n n f (n 2,∑kpk(x)2nnf(n2,n)的,这意味着用于将需要一个重大突破。但是可能是可能的,其中是矩阵乘法的当前指数。想法,有人吗?米≤ Ñ ˚F (f(n,m)=O(nlog⁡n)m≤n ωf(n,m)=nω/2ω


1
嗨拉斯穆斯。我想您打算在主站点上进行此操作。这是元站点,用于有关该站点的问题。
— Suresh Venkat

Answers:


3

使用普通的乘法对具有非零系数的多项式进行平方运算需要时间,因此对于那些多项式,这应该比FFT优先。如果,则大于的多项式数为,这将花费时间平方并合并(其余多项式也将合并)。这是对为时明显的边界的改进。 O (x 2 i)x i < √xiO(xi2) Σ我X我=ÑX我 √xi<nlog⁡n∑ixi=nxi O( √nlog⁡nø(Ñ 3 / 2(日志Ñ) 1 / 2)ø(米Ñ登录Ñ)米Θ( √O(n/log⁡n)O(n3/2(log⁡n)1/2)O(mnlog⁡n)mΘ(n/log⁡n)


1
我感兴趣的是一种无需计算每个项就可以计算总和的方法。对于我所想到的应用程序,对每个乘积执行FFT或逐项相乘将太慢。
— 拉斯穆斯·帕

2

没有一个完整的答案,但可能会有所帮助。

注意:仅当的支撑较小时,它才有效。pi2

对于多项式,令是其支持,而是支撑的大小。大多数将是稀疏的,即将有很小的支持。S q = { i ∣ a i ≠ 0 } s q = | 小号q | p 我q=a0+a1x+⋯+anxnSq={i∣ai≠0}sq=|Sq|pi

有一些算法可以 在乘积的支持范围内以准线性时间乘以稀疏多项式和,请参见例如http://arxiv.org/abs/0901.4323b a babab

的支持是(包含在),其中两个集合和和定义为。如果所有产品的支持量很小(例如,总共线性),则可以只计算产品并求和所有单项式。š 一个 + 小号b小号Ť 小号+ Ť := { s ^ + 吨| 小号∈ 小号,吨∈ Ť } ÑabSa+SbSTS+T:={s+t∣s∈S,t∈T}n

然而,找到多项式和使得的支撑大小是和的支撑大小的平方是非常容易的。在这个特定的应用中,我们对多项式求平方。所以问题是比大多少。通常的度量是倍数。有带有无穷倍数的集。但是,如果您可以排除具有大倍数的集作为支持,那么您可以找到解决问题的快速算法。 b a b a b S + S S | S + S | / | S | p 我abababS+SS|S+S|/|S|pi


1
尽管我不熟悉加法组合运算,但我认为广义算术级数和Freiman-Ruzsa定理都是关于加倍小的集的。
— 伊藤刚(Tsuyoshi Ito)

@Tsuyoshi:是的,我将编辑我的答案。但是,有些GAP具有较大的倍增常数。
— 5501

我个人认为这种方法没有希望。Freiman-Ruzsa定理的一个(非常不准确的)含义是| S + S | / | S | 小只有在特殊情况下,因此,部分“如果你能排除套具有较大的倍增数作为P_I的支持”是一个非常大的如果。但是,正如我所说,我对加法组合剂并不熟悉,您应该在其中加些盐。
— 伊藤刚(Tsuyoshi Ito)

当然,只有在所考虑的应用程序(我不知道)提供了很好的支持的情况下,它才有效。
— 5501

然后,如果您在回答中更明确地假设,将更容易理解。当前在答案中写假设的方式表明您认为小倍数的假设没什么大不了的。
— 伊藤刚(Tsuyoshi Ito)

2

只是想注意自然逼近算法。但是,这并没有利用稀疏性。

您可以使用随机序列 取我们可以使用FFT 在时间内计算。然后和。因此,您可以获得时间的近似值。(σi)i∈[n]X=∑iσipi(x)X2nlog⁡nEX2=∑ipi(x)2=SVX2=O(S)1+εO(ε−2nlog⁡n)


不错的方法!但是,您是否不需要更多的重复才能以很高的概率使所有系数正确?
— Rasmus Pagh

@RasmusPagh是的,如果您希望所有系数以概率保留,则可能会得到一个项。1 - δlog⁡(n/δ)1−δ
— Thomas Ahle
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.