正如@DavidRicherby指出的那样,由于不同的复杂性度量混杂在一起而引起混乱。但是,让我详细说明一下。
通常,在研究用于任意环上的多项式乘法的算法时,人们会对算法使用的环中的算术运算数量感兴趣。特别地,给定一些(可交换的,整体的)环,和两个多项式˚F ,克∈ [R [ X ]小于度的Ñ,所述Schönhage-Strassen的算法需要ø (Ñ 登录Ñ登录日志Ñ)的乘法和加法的ř为了计算˚F 克∈ [R [ X ]Rf,g∈R[X]nO(nlognloglogn)Rfg∈R[X]由大致邻接统一的第原始根到ř得到一些较大的环d ⊃ - [R ,然后,使用快速傅立叶变换过d,计算在产物d。nRD⊃RDD
如果你的戒指包含统一个根,那么这可以加速到Ø (ñ 登录ñ )在操作[R通过直接快速傅立叶变换过[R 。更具体地讲,在ž ⊂ Ç,你可以做到这一点使用Ø (ñ 日志ñ )环操作(忽略了一个事实,这将需要在复数精确的算法)。nO(nlogn)RRZ⊂CO(nlogn)
可以考虑的另一种措施是操作的位复杂度。这就是我们将两个长度为整数相乘的兴趣所在。在这里,原始运算是将两个数字相乘并加起来(带有进位)。因此,在将两个多项式乘以Z时,实际上需要考虑以下事实:在计算过程中出现的数字不能使用恒定数量的基本运算来相乘。这以及Z在n > 2时没有第n个本元统一根这一事实阻止了您应用O (n log n )nZZnn>2O(nlogn)算法。你通过考虑克服这个与来自环系数Ž / ⟨ 2 Ñ + 1 ⟩,由于产品多项式的系数将不超过此约束。存在(当Ñ是二的幂)时,有(同余类的)2作为Ñ统一的第根,以及通过递归调用对于系数乘法算法,可以实现共ø (Ñ 登录Ñ log log n )原始(即位)操作。然后,这继续进行整数乘法。f,gZ/⟨2n+ 1 ⟩ñ2ñØ (ñ 日志n 日志日志n )
例如,一个很好地强调了环运算和原始运算之间差异的重要性的示例,请考虑两种用于评估多项式的方法:霍纳法和Estrin法。Horner的方法计算一个多项式在一些X ∈ Ž通过利用身份
˚F (X )= (... (˚F Ñ X + ˚F ñ - 1)X + ... + ... )+F= ∑ñ我= 0F一世X一世X ∈ ž
而Estrin方法将 f分为两部分
H = n / 2 ∑ i = 1 f n / 2 + i X i和
L = n / 2 ∑ i = 0 f i X i,
即 H包含度项 > ñ / 2和大号度的条款 ≤ ñ / 2(假设 ñ
F(x )= (… (fñx + fn − 1)x + … + … )+ f0
FH= ∑我= 1n / 2Fn / 2 + 我X一世
L = ∑我= 0n / 2F一世X一世
H> n / 2大号≤ Ñ / 2ñ 为简单起见,是2的幂)。
F(x )
F(x )= 高(x )xn / 2+ L (x )
ñn + 日志ñ
n / 2n / 2Ω (n2)ñO (n )Ø (ñ 日志Cn )= O〜(n )c > 0