傅利葉變換在多項式乘法中的應用(一)

2022-03-31 20:18:13 字數 3656 閱讀 8776

\(a(x) = a_0 + a_1 x + a_2 x^2 + ··· + a_ x^\)

求多項式的點值表示式

為了得到\(a(x)\)的點值表示式,選擇一些比較特殊的\(x:=w_n^k\),\(k \in \\)代入。

已知\(e^ = cos \theta + i sin \theta\)

記 \(w_n^k = e^*k)} = cos(\frac*k) + i sin(\frac*k)\),則\(w_n^\)表示\(w_n^k\)的共軛複數。

從向量角度看,\(w_n^k\)和復平面中與實軸正向夾角為\(\frac*k\)的單位向量一一對應。

根據上面那個表示式可推得:

先將\(a(x)\)按照\(x\)的階的奇偶性分成兩組,既:

\[\begin

a(x) &= (a_0 + a_2 x^2 + ··· + a_ x^) + (a_1 x^1 + a_3 x^3 + ··· + a_ x^) \\

&=(a_0 + a_2 x^2 + ··· + a_ x^) + x(a_1 + a_3 x^2 + ··· + a_ x^)

\end\]令

\[a_1(x) = a_0 + a_2 x + ··· + a_ x^} \\

a_2(x) = a_1 + a_3 x + ··· + a_ x^}\]則

\[a(x) = a_1(x^2) + xa_2(x^2)

\]當\(x = w_n^k\),\(k \in \ - 1\}\),有

\[\begin

a(w_n^k) &= a_1((w_n^k)^2) + w_n^k*a_2((w_n^k)^2) \\

&= a_1(w_n^) + w_n^k * a_2(w_n^) \\

&= a_1(w_}^k) + w_n^k * a_2(w_}^k)

\end

\]當\(x = w_n^}\),\(k \in \ - 1\}\),有

\[\begin

a(w_n^}) &= a_1((w_n^})^2) + w_n^} * a_2((w_n^})^2) \\

&= a_1(w_n^) + w_n^} * a_2(w_n^) \\

&= a_1(w_n^) - w_n^k * a_2(w_n^) \\

&= a_1(w_n^) - w_n^k * a_2(w_n^) \\

&= a_1(w_}^k) - w_n^k * a_2(w_}^k)

\end

\]如果已知\(a_1(x)\)和\(a_2(x)\)在\(x = w_}^k\),\(k \in \ - 1\}\)處的值,那麼就可以在\(o(n)\)的時間內求得\(a(x)\)的點值表示式:\(((w_n^0,a(w_n^0)),(w_n^1,a(w_n^1)),···,(w_n^,a(w_n^)))\)。

求解\(a_1(x)\)和\(a_2(x)\)在\(x = w_}^k\),\(k \in \ - 1\}\)處的值與求解\(a(x)\)在\(x = w_n^k\),\(k \in \\)處的值的過程是一樣的,只是規模減少了一半,運用遞迴分析法可概括得:

\[\begin

t(n) &= 2t(\frac) + o(n) \\

&=o(nlg(n))

\end

\]拿個多項式模擬一下上述表示式蘊含的遞迴過程,如圖:

}點值表示式 \(\rightarrow\) 係數表示式 [ inverse discrete fourier transform ]

假設 \(d_k = a(w_n^k) = \sum_^a_i (w_n^k)^i\),\(k \in \\),構造如下多項式:

\[f(x) = d_0 + d_1 x^1 + d_2 x^2 + ··· + d_ x^

\]假設 \(c_k = f(w_n^) = \sum_^d_i(w_n^)^i\),\(k \in \\),展開\(d_i\)得:

\[\begin

c_k &= \sum_^[\sum_^a_j(w_n^i)^j] *(w_n^)^i \\

&= \sum_^\sum_^a_j(w_n^i)^j(w_n^)^i \\

&= \sum_^\sum_^a_j(w_n^i)^j(w_n^)^i & 交換求和順序 \\

&= \sum_^a_j[\sum_^(w_n^i)^j(w_n^)^i] \\

&= \sum_^a_j[\sum_^(w_n^)^] \\

&= \^a_j[\sum_^(w_n^)^]\} + \^(w_n^)^]\} \\

&= \^a_j[\sum_^(w_n^)^]\} +n*a_k

\end

\]當\(j \neq k\)時,令\(j - k = \theta\),有:

\[\begin

\^a_j[\sum_^(w_n^)^]\} &= \sum_^a_j(w_n^0 + w_n^ + w_n^+···+ w_n^) \\

&= \sum_^a_j(\frac)^n)}}) & 等比公式 \\

&= \sum_^a_j(\frac}}) \\

&= \sum_^a_j(\frac}}) \\

&= \sum_^a_j(\frac}) \\

&= 0

\end\]故

\[\begin

c_k &= n * a_k \\

a_k &= \frac

\end

\]所以只要求得了\(f(x)\)的點值表示式:\(((w_n^0, c_1), (w_n^, c_2), ···, (w_n^,c_))\),那麼就可以在\(o(n)\)的時間內求得\(f(x)\)的係數表示式:\((a_0, a_1, a_2, ···, a_)\)。

參考

快速傅利葉變換 UOJ 34 多項式乘法

這是一道模板題。給你兩個多項式,請輸出乘起來後的多項式。輸入格式 第一行兩個整數 nn 和 mm,分別表示兩個多項式的次數。第二行 n 1n 1 個整數,分別表示第乙個多項式的 00 到 nn 次項前的係數。第三行 m 1m 1 個整數,分別表示第乙個多項式的 00 到 mm 次項前的係數。輸出格式...

快速傅利葉變換 UOJ 34 多項式乘法

這是一道模板題。給你兩個多項式,請輸出乘起來後的多項式。輸入格式 第一行兩個整數 nn 和 mm,分別表示兩個多項式的次數。第二行 n 1n 1 個整數,分別表示第乙個多項式的 00 到 nn 次項前的係數。第三行 m 1m 1 個整數,分別表示第乙個多項式的 00 到 mm 次項前的係數。輸出格式...

第30章 多項式與快速傅利葉變換

這一章講了多項式之間的乘法,但僅限於兩個次數界相等並且為2的冪的多項式之間的乘法。運用了快速傅利葉變換及逆快速傅利葉變換演算法。遞迴的快速傅利葉變換 void recursivefft const vector coefficient,vector fftresult if length 2 0 t...