咱們知道普通型生成函數解決的是組合問題,而指數型生成函數解決的是排列問題html
對於數列\(\{a_n\}\),咱們定義其指數型生成函數爲
\[G(x) = a_0 + a_1x + a_2\frac{x^2}{2!} + a_3\frac{x^3}{3!} + a_4\frac{x^4}{4!} + \dots = \sum\limits_{i = 0}^{\infty} a_i\frac{x^i}{i!}\]
那麼對於兩個數列\(\{a_n\}\)和\(\{b_n\}\),其對應成生成函數爲
\[G(x) = \sum\limits_{i = 0}^{\infty} a_i\frac{x^i}{i!}\]
\[F(x) = \sum\limits_{i = 0}^{\infty} b_i\frac{x^i}{i!}\]
那麼
\[ \begin{aligned} F(x) \centerdot G(x) &= (\sum\limits_{i = 0}^{\infty} a_i \frac{x^i}{i!})(\sum\limits_{i = 0}^{\infty} b_i \frac{x^i}{i!}) \\ &= \sum\limits_{n = 0}^{\infty} (\sum\limits_{i = 0}^{\infty} \frac{a_ix^i}{i!} \centerdot \frac{b_{n - i}x^{n - i}}{(n - i)!})x^n \\ &= \sum\limits_{n = 0}^{\infty} (\sum\limits_{i = 0}^{\infty} {n \choose i} a_i b_{n - i}) \frac{x^n}{n!} \end{aligned} \]
因而可知兩個指數型生成函數相乘,若是\(x^i\)的係數表示的是選擇\(i\)個該物品的方案數,那麼\(F(x) \centerdot G(x)\)的\(x^i\)的係數表示的就是從\(a\)和\(b\)中選出\(i\)個物品的排列數函數
通常地,對於多重集合\(M\),從中選取\(k\)個元素的排列數,若限定元素\(a_i\)出現的次數集合爲\(M_i\),則該組合數序列的生成函數爲
\[\prod\limits_{i = 1}^{n}(\sum\limits_{m \in M_i} \frac{x^m}{m!})\]spa
一般,在指數型生成函數的使用過程當中,通常都會用到泰勒展開式:
\[e^{x} = \sum\limits_{i = 0}^{\infty} \frac{x^i}{i!} = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \frac{x^4}{4!} + \dots + \frac{x^n}{n!} + \dots\]
擴展的一些式子:
\[\frac{e^x + e^{-x}}{2} = \sum\limits_{i = 0}^{\infty} \frac{x^{2i}}{(2i)!}\]
\[\frac{e^x - e^{-x}}{2} = \sum\limits_{i = 0}^{\infty} \frac{x^{2i + 1}}{(2i + 1)!}\]
還有一些比較有用的公式:
\[\frac{1}{1 - x} = \sum\limits_{i = 0}^{\infty} x^i\]
\[ln(1 + x) = \sum\limits_{i = 0}^{\infty} (-1)^{i} \frac{x^{i + 1}}{i + 1}\]
\[(1 + x)^{a} = \sum\limits_{i = 0}^{\infty} a^{\underline{i}}\frac{x^i}{i!}\]
\[sin(x) = \sum\limits_{i = 0}^{\infty} (-1)^{i}\frac{x^{2i + 1}}{(2i + 1)!}\]
\[cos(x) = \sum\limits_{i = 0}^{\infty} (-1)^{i}\frac{x^{2i}}{(2i)!}\]htm
意義?
咱們要求將一個集合大小爲\(n\)的方案數,逆向思考
假如咱們求出了生成函數\(F(x)\),其中\(x^i\)項的係數表示集合大小爲\(i\)的方案數
咱們構造一個函數
\[G(x) = \frac{F(x)}{1!} + \frac{F^2(x)}{2!} + \frac{F^3(x)}{3!} + \dots\]
觀察式子發現\(G(x)\)中\(x^i\)的係數實際上就是選出若干集合大小恰好爲\(i\)的方案數
假設這個方案數很好求,咱們能很快構造出\(G(x)\),咱們如今要求\(F(x)\)的話就要使用多項式求\(ln\)了
觀察
\[G(x) = \frac{F(x)}{1!} + \frac{F^2(x)}{2!} + \frac{F^3(x)}{3!} + \dots = e^{F(x)}\]
則
\[F(x) = lnG(x)\]blog
假如咱們要求\(G(x) = lnF(x)\)
求導得
\[G'(x) = \frac{F'(x)}{F(x)}\]
則
\[G(x) = \int \frac{F'(x)}{F(x)} dx\]
因此咱們只需多項式求導,多項式求逆,多項式乘法,多項式積分
複雜度\(O(nlogn)\)get
例題BZOJ3456城市規劃it