\(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\)先將\(a(x)\)按照\(x\)的階的奇偶性分成兩組,既:記 \(w_n^k = e^*k)} = cos(\frac*k) + i sin(\frac*k)\),則\(w_n^\)表示\(w_n^k\)的共軛複數。
從向量角度看,\(w_n^k\)和復平面中與實軸正向夾角為\(\frac*k\)的單位向量一一對應。
根據上面那個表示式可推得:
\[\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...