定义多项式,其中deg(A) = q
和deg(B) = p
。的deg(C) = q + p
。
在这种情况下,deg(C) = 1 + 2 = 3
。
A=3+xB=2x2+2C=A∗B=?
通过系数的蛮力乘法,我们可以轻松地在时间内找到C。通过应用FFT(和逆FFT),我们可以在时间内实现这一目标。明确地:O(n2)O(nlog(n))
- 将A和B的系数表示形式转换为其值表示形式。这个过程称为评估。为此执行分而治之(D&C)将花费时间。O(nlog(n))
- 将多项式在其值表示中逐项相乘。这将返回C = A * B的值表示形式。这需要时间。O(n)
- 使用逆FFT反转C以获得系数表示形式的C。此过程称为插值,它也需要时间。O(nlog(n))
继续,我们将每个多项式表示为一个向量,其值就是其系数。我们将矢量填充0到最小的2的幂,。因此。选择2的幂可以为我们递归地应用分而治之算法。n=2k,n≥deg(C)n=4
A=3+x+0x2+0x3⇒B=2+0x+2x+0x3⇒a⃗ =[3,1,0,0]b⃗ =[2,0,2,0]
令分别为A和B的值表示。注意,FFT(快速傅立叶变换)是一种线性变换(线性图),并且可以表示为矩阵,。从而A′,B′M
A′=Ma→B′=Mb→
我们定义,其中是复数根复数根。注意,在此示例中。还要注意,第行和第列中的条目是。在此处查看有关DFT矩阵的更多信息M=Mn(ω)ωnthn = 4
jthkthωjkn
M4(w)=⎡⎣⎢⎢⎢⎢⎢⎢111...11ω1ω2...ωn−11ω2ω4...ω2(n−1).........ωjk...1ωn−1......ω(n−1)(n−1)⎤⎦⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢11111ωω2ω31ω2ω4ω61ω3ω6ω9⎤⎦⎥⎥⎥⎥
给定的单位根,我们得到有序的集合相等性:ω4=4th
{ω0,ω1,ω2,ω3,ω4,ω5,...}={1,i,−1,−i,1,i,...}
这可以通过在逆时针方向上遍历单位圆的根部来可视化。
另外,请注意mod n
性质,即和ω6=ω6modn=ω2=−1−i=ω3=ω3+n
为了完成步骤1(评估),我们通过执行以下操作找到A′,B′
A′=M∗a⃗ =⎡⎣⎢⎢⎢⎢11111ωω2ω31ω2ω4ω61ω3ω6ω9⎤⎦⎥⎥⎥⎥⎡⎣⎢⎢⎢3100⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢⎢3+13+1ω3+ω23+ω3⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢43+i23−i⎤⎦⎥⎥⎥B′=M∗b⃗ =⎡⎣⎢⎢⎢⎢11111ωω2ω31ω2ω4ω61ω3ω6ω9⎤⎦⎥⎥⎥⎥⎡⎣⎢⎢⎢2020⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢⎢2+22+2ω22+2ω42+2ω6⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢4040⎤⎦⎥⎥⎥
可以使用D&C算法来完成此步骤(超出此答案的范围)。
将分量相乘(步骤2)A′∗B′
A′∗B′=⎡⎣⎢⎢⎢43+i23−i⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢4040⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢16080⎤⎦⎥⎥⎥=C′
最后,最后一步是将C'表示为系数。注意
C′=Mc⃗ ⇒M−1C′=M−1Mc⃗ ⇒c⃗ =M−1C′
注意 1和。M−1n=1nMn(ω−1)ωj=−ωn/2+j
M−1n=14⎡⎣⎢⎢⎢⎢11111ω−1ω−2ω−31ω−2ω−4ω−61ω−3ω−6ω−9⎤⎦⎥⎥⎥⎥=14⎡⎣⎢⎢⎢11111−i−1i1−11−11i−1−i⎤⎦⎥⎥⎥
ω−j可以可视化为沿顺时针方向遍历单位圆弧的根部。
{ω0,ω−1,ω−2,ω−3,ω−4,ω−5,...}={1,−i,−1,i,1,−i,...}
同样,在给定统一的根的情况下,确实存在等式。(你明白为什么吗?)nthω−j=ωn−j
然后,
c⃗ =M−1C′=1nMn(w−1)=14⎡⎣⎢⎢⎢11111−i−1i1−11−11i−1−i⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢16080⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢⎢(16+8)/4(16−8)/4(16+8)/4(16−8)/4⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢6262⎤⎦⎥⎥⎥
因此,我们得到多项式 1:反演公式第73页,Dasgupta等人的算法。等 (C)2006C=A∗B=6+2x+6x2+2x3