多項式的各種運算總結(持續更新)


多項式的各種運算總結(持續更新)

標簽: 多項式開方 多項式求逆


多項式

多項式是個啥呢?
我們通常說的都是一元的多項式,所以一個多項式可以寫成形如:
\(a_ 0+a_ 1x+a_ 2x^2+a_ 3x^3......\)的式子
注意到,真正有用的是數列\(\{a_i\}\)
但是一旦我們要涉及到什么運算,就會發現對於\(\{a_i\}\)的某些運算不是特別方便。
所以我們定義生成函數\(A(x)=\sum_{i=0}^{\infty}a _ix^i\)\(A(x)\)就稱為數列\(\{a _i\}\)的生成函數。
通過生成函數,我們可以重新定義對於數列的一系列運算。

相等

對於數列來說,相等的條件是數列的每一項都相等。
但是對於生成函數來講,對於任意\(x\in C\)都有\(A(x)=B(x)\),那么有多項式\(A(x)=B(x)\)

加法

對於數列來說,加法就是數列的每一項都做加法。
但是對於生成函數來講,對於任意\(x\in C\)都有\(C(x)=A(x)+B(x)\),那么有多項式\(C(x)=A(x)+B(x)\)

講了這么多,是不是感覺很沒用,too young too simple啊,接下來看點有用的。

乘法

假如數列\(\{c_i\}\)是數列\(\{a _i\},\{b _i\}\)相乘的結果,
那么有\(c_i=\sum_{j=0}^ia _jb_{i-j}\)
注意到直接計算的復雜度是\(O(n^2)\)的。
這時候,就需要用到生成函數了。
顯然,對於任意\(x \in C\),都有\(C(x)=A(x)B(x)\),那么多項式\(C(x)=A(x)B(x)\)
借用方程的思想,如果我們知道了這個多項式n+1個點的值,那么就可以確定這個多項式的前n+1項。(假設其他項都為0)
所以現在的問題是,怎么快速的計算這n+1個點的值。
由於點是我們隨便取得,我們可以通過取一些特殊的點來達到這個目的。
不妨取1的n次負根的各個次冪,設\(w_ n\)表示1的n次復根,我們分別取\(w_ n^0,w_ n^1,......w_ n^{n-1}\)
對於這些點來說,有一些奇怪的性質。

  1. \(w_ {2n}^{2k}=w_ n^k\)
  2. \(w_ {2n}^{k}=-w_ {2n}^{k+n}\)

這有什么用呢,
假如要求一個多項式\(A(x)=\sum_{i=0}^{2n-1}a _ix^i\)\(w _{2n}^k(k\in[0,2n))\)代入的結果
我們可以利用分治的思想,先求出\(B(x)=\sum_{i=0}^{n-1}a _{2i}x^i,C(x)=\sum _{i=0}^{n-1}a _{2i+1}x^i\)\(w _{n}^k(k\in[0,n))\)代入的結果。
接下來,對於任意一個\(A(w _{2n}^k)\),都能表示成\(B,C\)兩個多項式的和。

我們只需要對k討論即可。
假如\(k < n\),那么\(A(w _{2n}^k)\)=\(B(w _n^k)+w _{2n}^kC(w _n^k)\)
假如\(k >= n\),那么\(A(w _{2n}^k)\)=\(B(w _n^{k-n})-w _{2n}^{k-n}C(w _n^{k-n})\)

這樣,復雜度\(T(n)=O(n)+2T(n/2)\)
最終復雜度為\(O(nlogn)\)

我們現在已經將多項式轉化成了點值,如果想將點值重新轉化成多項式,只需要再做一次逆矩陣的乘法即可。
實現的時候還需要注意,因為分治嚴格的分成了兩份,所以一開始先要把n變為2的冪,然后才能做分治。

除了整個復數域都可以,模意義下也可以進行多項式的乘法。
可以注意到,原根有着與上面一樣的性質。
模意義下,顯然有\(x^{p-1 \over 2}=-1\)(x為p的原根,p為質數)
於是在模意義下也可以進行多項式乘法。

求逆

對多項式而言,兩個多項式相乘等於單位多項式,那么這兩個多項式互逆。
顯然,單位多項式的條件是任何多項式乘以單位多項式都為原來的多項式。
不難發現這樣的多項式是\(F(x)=1\)
寫成數學符號:若\(A(x)B(x)=1\),則\(A,B\)兩個多項式互逆。
當然,一般情況下幾乎都是在模意義下進行,而且只關注前n項的值。
和乘法類似,求逆也需要用到分治的方法。
\(A(x)B(x)=C(x)\ \ \ [n]\)代表\(A(x)與B(x)的乘積在前n項的結果與多項式C(x)的前n項相同\)

假如有\(A(x)C(x)=1 \ \ \ \ [{n \over 2}]\)
我們需要知道\(B(x)C(x)=1 \ \ \ \ [n]\)
相減得\((B(x)-A(x))C(x)=0 \ \ \ \ [n \ over 2]\)
顯然\(C(x)\)不等於0.
所以\(B(x)-A(x)=0 \ \ \ \ \ \ [{n \over 2}]\)
但是我們需要求的是前n項的,所以我們可以對上面這個式子平方。
如果一個多項式前\({n \over 2}\)項都是0,那么平方之后前\(n\)項應該都是0.
\((B(x)-A(x))^2=0 \ \ \ \ [n]\)
$A(x)^2-2A(x)B(x)+B(x)^2=0\ \ \ \ [n] \( 移項,得\)B(x)^2=2A(x)B(x)-A(x)^2\( \)B(x)=2A(x)-{A(x)^2 \over B(x)}\( 又有\)B(x)C(x)=1 [n]\( 分母分子同時乘上\)C(x)\(, 得\)B(x)=2A(x)-A(x)^2C(x)$
當n=1時,顯然可以直接求逆元。

復雜度\(T(n)=T(n/2)+O(nlogn)\)

開方

即求\(B(x)^2=C(x)\ \ \ \ [n]\)
借用剛才的思路,我們先求出\(A(x)^2=C(x)\ \ \ \ [{n \over 2}]\)
\(B(x)^2-A(x)^2=0 \ \ \ \ [{n \over 2}]\)
\((B(x)^2-A(x)^2)^2=0 \ \ \ \ [n]\)
那么 \(A(x)^4-2A(x)^2B(x)^2+B(x)^4 =0\ \ \ \ \ [n]\)
\(B(x)^2={A(x)^4+B(x)^4 \over 2A(x)^2}[n]\)
\(2B(x)^2={(A(x)^2+B(x)^2)^2 \over 2A(x)^2}[n]\)
\(B(x)^2=({A(x)^2+B(x)^2 \over 2A(x)})^2[n]\)
\(B(x)^2=({A(x)^2+C(x) \over 2A(x)})^2[n]\)
那么括號里面的即為所求。
當其只有一項的時候,只需要在模意義下做二次剩余即可。

(未完待續)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM