【詳解】生成函數


參考資料

指數型生成函數

數列\(\{a_i\}\)的指數型生成函數(EGF)是\(A(x)=\sum_{i=0}^\infty\frac{a_i}{i!}x_i\)

\(C=A*B\),則

\[\begin{aligned} C &= (\sum_{i\ge 0}\frac{a_i}{i!})(\sum_{i\ge 0}\frac{b_i}{i!}) \\ &= \sum_{i\ge0}x^i\sum_{j=0}^i\frac{a_jb_{i-j}}{j!(i-j)!} \\ &= \sum_{i\ge0}\frac{\sum_{j=0}^i\frac{i!}{j!(i-j)!}a_jb_{i-j}}{i!}x_i \end{aligned} \]

\[\boxed{c_i=\sum_{j=0}^i\binom{i}{j}a_jb_{i-j}} \]

多項式\(\exp\)\(\ln\)的意義

\(A\)為表示藍色的帶編號樹的個數的生成函數(即,\(a_n\)表示\(n\)個節點的帶編號樹的個數),\(B\)代表紅色的帶編號樹的個數,則\(A*B\)代表一個兩棵樹的森林,一棵為紅色,一顆為藍色,這樣的森林的個數。

又因為紅色與藍色可以交換,若不考慮顏色,同一個森林實際上被計數了兩遍,故\(\frac{A^2}{2!}=A*A/2\)代表兩棵樹的森林的個數。

以此類推,枚舉森林中樹的個數\(i\),則\(C=\sum_{i\ge 0}\frac{A^i}{i!}\)代表了森林的個數。

由於對\(x\in\R\)\(e^x=\sum_{i\ge0}\frac{x^i}{i!}\)(在\(x=0\)處泰勒展開),如果令\(x=A\),我們可以記\(C=e^A\)。這樣,我們得到了多項式\(\exp\)的定義:

\[\boxed{e^A=\sum_{i\ge0}\frac{A^i}{i!}} \]

其中\(A\)是一個生成函數,\(A^i\)表示多項式\(A\)\(i\)次方。同樣,通過泰勒展開的方法,我們可以得到多項式\(\ln\)的定義。

多項式運算的實現

多項式乘法逆

\(A(x)=\sum_{i\ge 0}a_ix^i\),且有\(a_0\ne 0\),則其存在唯一的逆\(B(x)=\sum_{i\ge 0}b_ix^i\),滿足:

\[c_i=\sum_{0\le j\le i}a_{j}b_{i-j}=[i=0]\nonumber \]

顯然,可以如此遞歸地定義\(b_i\)

考慮如何求\(B(x)\bmod x^n\),顯然\(n=1\)\(b_0=a_0^{-1}\)

若已求得\(\bmod x^{\lceil n/2\rceil}\)的答案\(B_0\),考慮如何推得\(B\)

我們顯然有:

\[(B-B_0) \equiv 0 \pmod{x^{\lceil n/2\rceil}} \nonumber \]

對兩邊平方,得

\[\begin{aligned} (B-B_0)^2 &\equiv 0 \\ B^2-2BB_0+B_0^2 &\equiv 0 \\ B^2 &\equiv 2BB_0 - B_0^2 \\ B &\equiv 2B_0-B_0^2B^{-1} \end{aligned}\pmod{x^n} \]

其中最后一步是在兩邊乘了一個\(B^{-1}\)。由於\(A\)\(B\)互為乘法逆,\(B^{-1}\equiv A\),故:

\[\boxed{B\equiv B_0(2-B_0A)}\pmod{x^n} \label{inv}\tag{1} \]

遞歸計算即可。

多項式\(\ln\)

\(B=\ln A\),將其兩邊取導數。由\(\mathrm {\frac{d}{dx}}\ln A=\frac{1}{A}A'\),有\(B'=\frac{A'}{A}\),故

\[\boxed{B = \int\frac{A'}{A}\mathrm{dx}} \]

\(\eqref{inv}\)求出\(A^{-1}\)即可。

牛頓迭代法

泰勒展開

\(G(x)\)為一個定義在\(\mathbb R\)上函數,則\(G(x)\)\(x_0\)處的泰勒展開(一個函數,使得\(x_0\)處的\(0\)階、\(1\)階、……導數都相等(可類比拉格朗日插值公式))為:

\[\begin{eqnarray} G(x) &=& G(x_0)+G'(x_0)(x-x_0)+\frac{G''(x_0)(x-x_0)^2}{2!}\cdots\nonumber \\ &=& \sum_{i=0}^{\infty}\frac{G^{(i)}(x_0)}{i!} \label{taylor}\tag{2} \end{eqnarray} \]

注意,由於\(x_0\)固定,\(G(x_0)\)\(G'(x_0)\)等都是常數。

為了方便接下來的討論,我們設\(G(x)=f(x)+b\),其中\([x^0]f(x)=0\)(即\(f(0)=0\))。

我們擴大\(G\)的定義域,使得\(G\)對於所有級數\(F\)都有定義,為\(G(F)=f(F)+b\),其中\(b\)也可以是一個(常)級數,\(f\)是一個函數。同樣\(f\)的系數也可以是常級數。

我們的任務是求\(G(F)\equiv 0\)\(\bmod x^n\)意義下的解。

考慮倍增,設\(F_0\)表示\(\bmod x^{\lceil x/2\rceil}\)意義下的解,有(將\(G\)\(F_0\)處泰勒展開\(\eqref{taylor}\)

\[0\equiv G(F)\equiv G(F_0)+(F-F_0)G'(F_0)+(F-F_0)^2R\pmod{x^n}\nonumber \]

其中\(R\)是一個關於\(F\)的函數。由於\((F-F_0)\bmod x^{\lceil n/2\rceil}=0\),可知\((F-F_0)^2\bmod x^{n}=0\),故

\[\begin{aligned} G(F_0)+(F-F_0)G'(F_0) &\equiv 0 \\ FG'(F_0) &\equiv F_0G'(F_0)-G(F_0) \\ \end{aligned}\pmod{x^n} \]

兩邊除以\(G'(F_0)\),我們獲得了:

\[\boxed{F \equiv F_0-\frac{G(F_0)}{G'(F_0)}} \pmod{x^n}\label{newton}\tag{3} \]

多項式\(\exp\)

\(B=e^A\),則\(\ln B=A\)。我們相當於要解\(\ln B-A=0\)

\(F(B)=\ln B-A\),直接使用\(\eqref{newton}\),得:

\[\begin{aligned} B &\equiv B_0-\frac{\ln B_0-A}{B_0^{-1}} \\ \end{aligned} \]

\[\boxed{B \equiv B_0(1-\ln B_0+A)}\label{exp} \]

倍增即可,需要用到多項式\(\ln\)

例題


免責聲明!

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



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