幂级数
幂级数是一个形如无限长的序列 \(f(x) = a_0 + a_1x + a_2x^2 + a_3x^3 + \dots\)。其中, 我们称 \({a_n}\) 为这个幂级数的系数序列。
我们称两个幂级数相等当且仅当他们的系数序列 \({a_n}\) 相等。记 [\(x^n\)]\(f(x)\) 表示幂级数 \(f(x) = \sum_{n \ge 0}a_nx^n\) 的 \(a_n\)。
对于幂级数, 他有四则运算。
令 \(f(x)\) = \(\sum \limits_{n \ge 0}a_nx^n\), \(g(x)\) = \(\sum \limits_{n \ge 0}b_nx^n\)
则 \(f(x) \pm g(x)\) = \(\sum_{n \ge 0} a_nx^n \pm \sum_{n \ge 0}b_nx^n = \sum_{n \ge 0} (a_n \pm b_n)x^n\)。
\(f(x) \cdot g(x) = \sum_{n \ge 0} \sum \limits_{i = 0}^n a_ib_{n-i}\)。
对于除法, 我们只需要求出 \(f(x)^{-1}\), 我们设 \(g(x) = \sum_{n \ge 0} b_n, f(x)g(x) = 1\), 若 \(f(x)\) 的 \(a_0\) 等于 \(0\), 则无解 (不可能凑出那一位为1)。
我们就知道 \(b_0 = 1/a_0\)。
我们可以通过归纳法构造答案。
假设我们已经求出了 \(b_0, b_1 \dots b_{k - 1}\) \((k \ge 1)\), 我们推导 \(b_k\), 由定义, 我们知道 \(\sum \limits_{i = 0}^k a_i \cdot b_{k - i} \Leftrightarrow a_0b_n + \sum \limits_{i = 1}^k a_i \cdot b_{k - i} = 0, b_n = \frac{-\sum \limits_{i = 1}^k a_i \cdot b_{k - i}}{a_0}\)
幂级数的四则运算满足在整数中的那些规律。
一个特殊的幂级数 \(1 + x + x^2 + \dots = \frac{1}{1 - x}\)
作者作者眼中的生成函数, 你有时候要取第 \(x^n\) 项, 其实这向一个无限大的分组背包放一起进行操作 (即 dp)。
普通生成函数
对于一个序列 \({a_n}\), 我们定义其普通生成函数 (一般叫做 OGF), 为它的幂级数 \(A(x) = \sum_{n \ge 0} a_nx^n\)。
两个序列做四则运算, 他们的 OGF 也做相应的操作。
一些构造。
\(C_{k}^i = [x^i](1 + x)^k\)
\(\frac{1}{(1 - x)^m} = (1 + x + x^2 + \dots)^m\), 则第 \(n\) 项相当于选一些数 \(i_0, i_1 \dots i_m\), 使得 \(i_1 \ge 0, i_2 \ge 0, \dots i_m \ge 0\), \(\sum \limits_{i = 1}^n i_1 = n\), 即 \(C_{n + m - 1}^{m - 1}\)
指数生成函数
以上生成函数可以解决不同物品之间不用定顺序的问题, 如果遇到要定顺序的改怎么办。
即 \(f(x) = \sum_{n \ge 0} a_nx^n, g(x) = \sum_{n \ge 0} b_nx^n\), \(f(x) \cdot g(x) = \sum \limits_{n \ge 0} (\sum \limits_{i = 0}^n C_{n}^i \cdot a_ib_{n - i}) x^n\), 我们考虑把 \(C_{n}^i\) 拆成 \(\frac{n!}{i! \cdot (n - i)!}\), 即令 \(f(x) \cdot g(x) = p(x) = \sum_{n \ge 0} c_nx^n, c_n = n! \sum \limits_{i = 0}^n \frac{a_i}{i!} \cdot \frac{b_{n - i}}{(n - i)!}, \frac{c_n}{n!} = \sum \limits_{i = 0}^n \frac{a_i}{i!} \cdot \frac{b_{n - i}}{(n - i)!}\), 所以, 我们可以维护 \(A(x) = \sum_{n \ge 0}\frac{a_n}{n!} x^n\), 我们称他为 EGF。
指数生成函数相互加, 减, 乘, 他们的 EGF 也跟着变化。