生成函数

1. 生成函数

1.1 普通型生成函数 OGF

1.1.1 基础

序列 \(\{f_i\}_{i=0}^n\) 的普通型生成函数是 \(F(x) = \sum_{i=0}^nf_ix^i\)\(n\) 可以等于 \(\infty\)

有一些常用的运算规则需要记住:

\[F(x) + G(x) = H(x) \iff h_n = f_n + g_n \]

\[F(x)G(x) = H(x) \iff h_n = \sum_{i=0}^nf_ig_{n-i} \]

\[x^kF(x) = \sum_{i \ge k}f_{i - k}x^i \]

\[F'(x) = \sum_{i \ge 0} (i+1)f_{i+1} x^i \]

牛顿二项式定理:定义 \(\binom{r}{n} = \frac{r^{\underline{n}}}{n!}\)\(r\) 为任意实数。则:\((x+1)^r = \sum_{i\ge 0}\binom{r}{i}x^i\)

还有一个关于幂级数的和式:\(\sum_{i \ge 0}x^i = \frac{1}{1 - x}\)

常见的生成函数:

斐波那契序列:\(F(x) = \frac{1}{1 - x - x^2}\)

卡特兰序列:\(C(x) = \frac{1 - \sqrt{1 - 4x}}{2x}\)

1.1.1 解递推式

生成函数可以用来解递推式。

比如斐波那契数列,卡特兰数列等。

关键在于将每一项都变成生成函数的形式。

比如 \(f_{0} = 0, f_{1} = 1, f_{i} = f_{i - 1} + f_{i - 2}\)

我们将其变成:\(F(x) = xF(x) + x^2F(x)\) 然后解出 \(F(x)\) 即可。

P4451 [国家集训队] 整数的lqp拆分

我们不妨设 \(g_n\) 表示答案,考虑这个序列的生成函数。

如果拆成 \(k\) 个答案即为 \(F(x)^k\),所以 \(G(x) = \sum_{i \le 0}F(x)^i = \frac{1}{1 - F(x)}\)

然后代入 \(F(x)\) 可以得到:\(F(x) = \frac{1-x-x^2}{1-2x-x^2}\)

这种时候我们一般会把分母展开成 \((x-x_1)(x-x_2)\) 的形式,然后就可以用幂级数表示出通项了。

posted @ 2024-03-23 17:15  rlc202204  阅读(26)  评论(0编辑  收藏  举报