Chlience

【算法】生成函数 从出生到凉凉
普通型生成函数(Ordinary Generation Function)对于一个无穷数列$f_0 , f_1 ,...
扫描右侧二维码阅读全文
13
2018/10

【算法】生成函数 从出生到凉凉

普通型生成函数(Ordinary Generation Function)

对于一个无穷数列$f_0 , f_1 , f_2 , \cdots$

将其看做一个无穷维向量,写出其形式幂级数:

$f(x) = \sum_{i = 0}^{\infty} f_i x^i$

例:数列$1,1,1,\cdots$的生成函数为:

$f(x) = 1 + x + x^2 + \cdots$

$x$没有实际含义(形式幂级数),故不考虑收敛域

二次项系数$C(a , 0) , C(a , 1), \cdots$生成函数为$(1 + x)^a$

设方程$e_1 + e_2 + \cdots + e_k = n$的非负整数解的方案为$h_n$,则$h_n$的生成函数为$e_1 , e_2 , \cdots , e_k$的生成函数的乘积

例:考虑$3e_1 + 4e_2 + 2e_3 + 5e_4 = n$的非负整数解的方案书数$h_n$的生成函数

令$f_1 = 3e_1 , f_2 = 4e_2 , f_3 = 2e_3 , f_4 = 5e_4$,得到

$f_1 + f_2 + f_3 + f_4$,且$f$的约束是:为上述关于$e$系数的倍数

$$h(x) = (\sum_{i = 0}^{\infty} x^{3i})(\sum_{i = 0}^{\infty} x^{4i})(\sum_{i = 0}^{\infty} x^{2i})(\sum_{i = 0}^{\infty} x^{5i})$$

$$= \frac{1}{1 - x^3} \frac{1}{1 - x^4} \frac{1}{1 - x^2} \frac{1}{1 - x^5}$$

每一项的系数为取值,将加法转化为乘法

普通型生成函数题目

BZOJ 3028 食物

指数生成函数(Exponential Generation Function)

对于数列$f_0 , f_1 , f_2 , \cdots$,其指数型生成函数为

$f(x) = \sum_{i=0}^{\infty} \frac{f_i}{i!} x^i$

例:数列$1 , 1 , 1 , \cdots$的指数型生成函数为

$f(x) = \sum_{i = 0}^{\infty} \frac{1}{i!} x^i$

$f(x) = e^x$的麦克劳林级数为

$\sum_{i = 0}^{\infty}\frac{f^i(x)}{i!}x^i$

由自然对数性质可得$f^i(x) = e^x , f^i(0) = 1$

即$e^x = \sum_{i=0}^{\infty} \frac{1}{i!} x^i$

由$P_n^i = C_n^i * i!$

$P_n^0 , P_n^1 , P_n^2 , \cdots , P_n^n$的指数生成函数是$(1 + x)^n$

定义多重集的排列组合

$S = \{n_i · a_i\}(n_i = 0 , 1 , 2 ,\cdots , k)$,表示$S$集合中有$n_i$个$a_i$,$n_i$被称为元素$a_i$的重数,$k$称为多重集的类别数

多重集$S = \{n_i · a_i\}(n_i = 0 , 1 , 2 ,\cdots , \infty)$的$n$排列数的指数生成函数是

$$\prod_{i}\sum_{j = 0}^{n_i} \frac{1}{j!} x^j$$

相当于$\infty$个全$1$数列指数生成函数的乘积

相当于是枚举对于每一个元素$a$,选择多少个,将其放入序列中有多少种不同的方法,最后求乘积和

最终答案为$n! *$($x^n$的系数)

结合$n$排列数公式$\frac{n!}{\prod_i m_i!}(\sum_i m_i = n)$

Problem

确定用红、白、蓝三色给$1 \times n$的棋盘的着色中,红格数是偶数,且至少有一个蓝格的着色方法数$h_n$

红:$\sum_{i = 0}^{\infty} \frac{1}{2i!} x^{2i}$

蓝:$\sum_{i = 1}^{\infty} \frac{1}{i!} x^{i}$

白:$\sum_{i = 0}^{\infty} \frac{1}{i!} x^{i}$

$h(x) = (\sum_{i = 0}^{\infty} \frac{1}{2i!}x^{2i}) (\sum_{i = 1}^{\infty} \frac{1}{i!} x^{i}) (\sum_{i = 0}^{\infty} \frac{1}{i!} x^{i})$

$h(x) = \frac{e^x + e^{-x}}{2}e^x(e^x - 1)$

$h(x) = \frac{e^{3x} - e^{2x} + e^x - 1}{2}$

$e^x = \sum_{i = 0}^{\infty} \frac{1}{i!} x^i$

$h(x) = -\frac{1}{2} + \sum_{i = 0}^{\infty}\frac{(3x)^i - (2x)^i + x^i}{2 * i!}$

$$h_n = \frac{3^n - 2^n + 1}{2}$$

BZOJ 3771 Triple

BZOJ 3456 城市规划

BZOJ 3059 COUNTARI

生成函数求数列通项

$h_n = 5h_{n - 1} - 6h_{n - 2}(n \geq 2) , h_0 = 1 , h_1 = 2$

将其用生成函数形式写出,$n$次项用$n - 1 , n - 2$次项代替,得

$h(x) = 5x(h(x) - h_0) - 6x^2h(x) +(h_0 - h_1x)$

将$h_0 , h_1$代入,$h(x)$移至一侧,得

$$h(x) = \frac{1 - 7x}{6x^2 - 5x + 1}$$

将其化为$\frac{S}{1 - rx}$的形式,得

$$h(x) = \frac{5}{1 - 2x} - \frac{4}{1 - 3x}$$

最后用形式幂级数表示

$$h(x) = \sum_{i = 0}^{\infty}(5 * 2 ^ i - 4 * 3 ^ i) x ^ i$$

Last modification:October 13th, 2018 at 10:45 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment