这个答案是Schönhage和Strassen对长整数乘法的第一种算法(“ Methode A”)分析的一种变体。
假设我们要计算长度为的FFT 。缩放您的输入,使其所有值都小于1。首先让我们假设我们使用位定点算法(二进制点后位)进行计算。令为最小位置的(“复杂”)单位。令。米米δ = 2 1 / 2 - 米 ω = EXP (2 π 我/ ķ )ķ= 2ķ米米δ= 21 / 2 - 米ω = 经验(2 πi / K)
1)可以计算近似值,使得
均为。这可以在时间,其中是乘以位数字所需的时间。(参见Knuth第2卷,第3版,第309页)。 | ω ' Ĵ - ω Ĵ | ≤ (2 ķ - 1 )δ 0 ≤ Ĵ ≤ ķ - 1 Ö (ķ 中号(米))中号(米)米ω′Ĵ| ω′Ĵ- ωĴ| ≤(2k−1)δ0 ≤ Ĵ ≤ ķ− 1Ø (ķ中号(米))中号(米)米
如果标准整数RAM表示对数成本,则。如果标准整数RAM表示字RAM,则。(Schönhage和Strassen的在“了Methode A”示出了如何在时间线性的乘法减少位编号,以的乘法的位号。后者可以在单位成本来进行。)M (m )= O (m )m m O (log m )中号(m )= O (m logm )中号(m )= O (m )米米O (对数m )
2)经典的Cooley-Tukey FFT计算形式为运算
。我们使用位定点算法,这些运算变为。如果我们知道和的误差为,则得到的误差为。米一个' = 吨- [R Ü Ñ Ç 一吨ë (b ' + ω ' Ĵ ç ')b ' ç ' ε 一个' 2 ε + 2 ķ δa = b + ωĴC米一种′= t r u n c a t e (b′+ ω′ĴC′)b′C′ϵ一种′2 ε + 2 ķ δ
3)使用归纳法,很容易看到我们得到了误差为的最终结果。为了最终获得精度,
。 b 米≥ ķ + 日志ķ + b + Ö (1 )(2k−1)⋅2kδbm≥k+logk+b+O(1)
4)因此,最终运行时间为。O(KkM(k+b))
这也适用于浮点数:1)仍然可以使用定点算术完成,2)对于浮点数也适用。
我认为,在定点算法中,它甚至可以更快地完成。首先,我们使用Bluestein的技巧将FFT的计算简化为多项式的乘法。获得所需精度所需的系数的长度应为。然后,我们将多项式的乘法减少为长整数的乘法。(将系数附加为一个长整数,然后用零个长度为的块将它们分开。)整数的长度为。O (k + b )O (K (k + b ))O(k+b)O(k+b)O(K(k+b))