生成函数(1):基础
牛顿二项式定理
熟悉的二项式系数 \(n\choose m\) 很多时候无法满足我们日益增长的需求,现在我们来扩充一下 \(n\) 的定义域,由正整数域扩充到 \(r\choose m\)。同时将 \(m\) 扩充到整数域。
我们定义 \({r\choose m} = \begin{cases}0 & (m < 0) \\ \dfrac{r(r - 1)(r - 2)\dots(r - m + 1)}{m!} & (m \ge 0)\end{cases}\)。也就是 \(r\) 下降幂次除以 \(m!\)。
那么存在 \((x + y) ^ n = \sum\limits_{i \ge 0}{n \choose i}x^iy^{n - i}\)
它可以用来展开式子。
形式幂级数
对于一个数列(可以是无穷的)\(a_i\),定义其形式幂级数为
\(f(x) = \sum\limits_{n = 0}a_nx^n\)
这里面 \(x\) 什么含义都没有。正如(抱歉,忘了数学家名字了 qaq)所说,生成函数只不过是挂数字的晾衣架而已。
EI 老师云,生成函数是数列在多项式上的投影。
运算
加减乘
记 \(f(x) = \sum\limits_{n = 0}a_n x^n, g(x) = \sum\limits_{n = 0}b_nx^n\)。
\(f(x) + g(x) = \sum\limits_{n = 0}(a_n + b_n)x^n\),\(f(x)g(x) = \sum\limits_{k = 0}(\sum\limits_{i+j=k}a_ib_j)x^k\)。
位移
将整个数列右移 \(w\) 位,那么
\(f(x) = x^w\sum\limits_{i = 0}a_ix^i = \sum\limits_{i = w}a_{i - w}x^i\)
左移 \(w\) 位,可能会将有些元素移除数列中,需要注意
\(f(x) = x^{-w}\sum\limits_{i = w}a_ix^i = \sum\limits_{i = 0}a_{i+w}x^i\)
封闭形式
很多时候形式幂级数是不封闭的形式,不利于我们使用,所以我们需要使用封闭形式来对此进行简化。
等比数列
对于数列 \(a_i = cp^i\),生成函数
\(A(x) = \sum\limits_{i = 0}cp^ix^i\)。模仿一下经典的错位相减可以得到
\(pxA(x) + c = A(x)\) 最后得到 \(A(x) = \dfrac{c}{1 - px}\)。
这个结果看上去非常的怪异。这么一长串的合式怎么会变成这样?这是形式幂级数,因此这里的 \(x\) 只是一个“形式”而已,不用对此较真。这就和 \(i\) 一样。\(i\) 是什么数?先别管 qwq
小小的变式:特别的,对于 \(A(x) = \sum\limits_{i = m}cp^ix^i\),怎么处理?
还是很显然的伐,\(A(x) = p^mx^mc\sum\limits_{i = 0}p^ix^i = \dfrac{cx^mp^m}{1 - px}\)
线性齐次递推
我们以斐波那契数列为例,对于涉及更多项的齐次递推本质相同。
\(a_i = \begin{cases}0&i = 0\\1&i =1\\ a_{i - 1} + a_{i - 2} & i > 1\end{cases}\),生成函数记作 \(f(x)\)。
考虑通过位移将齐次递推中的和项给拼起来,最后形成一个 \(f(x)\) 的方程,解出来 \(f(x)\) 即可。
因为 \(0, 1\) 都是给定的,后面才是递推的,所以我们这样考虑
\(f(x) - 0x^0 - 1x^1 = \sum\limits_{i = 2}(a_{i - 1} + a_{i - 2})x^i = x\sum\limits_{i = 1}a_{i}x^i + x^2\sum\limits_{i = 0}a_ix^i = x[f(x) - 0x^0] + x^2f(x)\)
于是得到 \(f(x) - x = xf(x) + x^2f(x)\),最终应有 \(f(x) = \dfrac{x}{1 - x - x^2}\)
对于一般的线性齐次递推也完全可以利用上面的思路。这是相当具有一般性的,但是写起来实在太麻烦了。
一些例子
部分和
如果我们知道 \(a\) 的生成函数了,那么 \(s_i = \sum\limits_{j = 0}^i a_j\) 呢?
\(g(x) = (a_0) + (a_0 + a_1)x + (a_0 + a_1 + a_2)x^2 + \dots \\ = f(x) + xf(x) + x^2f(x) + \dots \\ = (1 + x + x^2 + x^3 + \dots)f(x) = \dfrac{f(x)}{1 - x}\)。部分和的生成函数是 \(\dfrac{1}{1 - x}f(x)\)。
Catalan 数
定义 \(c_i = \begin{cases}1& i = 0 \\ \sum\limits_{j = 0}^{i - 1} c_jc_{i - j - 1} & i > 0\end{cases}\),我们要求出 \(c_i\) 的生成函数,封闭形式,还有通项。
令其生成函数为 \(f(x)\),观察到下面的形式像一个卷积,于是发现 对于 \([x^n]f^2(x) = \sum\limits_{i = 0}^n c_ic_{n - i} = c_{n+1}\),因此应该有 \(xf^2(x) +1 = f(x),xf^2(x) - f(x) + 1 = 0\),然后得到 \(f(x) = \dfrac{1 \pm {\sqrt{1 - 4x}}}{2x}\)。神秘的事情就出在这里了,如果取 \(+\) 号,那么就可能出现 \(x = 0, f(0) = 2/0\),这是没办法接受的,但是如果取 \(-\) 号,那么 \(x = 0, f(0) = 0/0\) 可以洛(我不会洛必达法则 QAQ 不过我们可以简单的这么认为吗?\(0/0\) 是可以接受的)。所以我们取 \(-\),\(f(x) = \dfrac{1 - \sqrt{1 - 4x}}{2x}\)。
接下来的问题就是把它展开。主要的问题就在于对 \(g(x) = \sqrt{1 - 4x} = (1 - 4x)^{1/2}\) 的展开。利用牛顿二项式定理,
到这一步我们发现问题变成了如何对一串前缀奇数进行求积。偶数求乘积很容易,所以我们把它化为偶数
\(s = \prod\limits_{i = 0}^n (2i + 1), \dfrac{(2n + 1)!}{s} = \prod\limits_{i = 1}^n 2i = 2^nn!\),故 \(s = \dfrac{(2n + 1)}{2^n n!}\)。上面的讨论中实际上求的是 \((n - 2)\) 的情况,所以 \(n = 0, n = 1\) 的两个系数我们单独算一下,分别是 \([x^0]g(x) = 1, [x^1]g(x) = -2\).
接下来 \([x^n]g(x) = 2^n(-1)\dfrac{(2n - 3)!}{2^{n - 2}(n - 2)!n!}x^n \\ = \dfrac{(-4)(2n - 3)!}{(n - 2)!n!}x^n\)。
则 \(g(x) = 1 - 2x + \sum\limits_{n = 2}\dfrac{(-4)(2n - 3)!}{(n - 2)!n!}x^n\)。
于是 $$f(x) = \dfrac{1 - g(x)}{2x} \ = \dfrac{2x + \sum\limits_{n = 2}\dfrac{4(2n - 3)!}{(n - 2)!n!}x^n}{2x} \ = 1 + \sum\limits_{n = 2}\dfrac{2(2n - 3)!}{(n - 2)!n!}x^{{n - 1}} \ = 1 + \sum\limits_{n = 1}\dfrac{2(2n - 1)!}{(n - 1)!(n + 1)!}x^n \ = 1 + \sum\limits_{n = 1}\dfrac{(2n)!}{n!(n + 1)!}x^n \ = 1 + \sum\limits_{n = 1}\dfrac{{2n \choose n}}{n + 1}x^n$$。
于是得到 \(c_n = \dfrac{{2n\choose n}}{n + 1}\)。
*五边形数(without proof)
我们令 \(p_n\) 为 \(n\) 的正整数拆分数,即有多少种的数列 \(a\) 使得
- \(a_1 + a_2 + \dots + a_k = n\)。
- \(a_1 \ge a_2 \ge \dots \ge a_k\ge 1\)。
注意到这个形式很像一个卷积,我们考虑选择数字 \(c\) 进入拼凑,那么就是乘上一个 \(1 + x^c + x^{2c} + \dots = \dfrac{1}{1 - x^c}\),于是 \(p\) 的生成函数就是
\(f(x) = \prod\limits_{c = 1}\dfrac{1}{1 - x ^c} = \dfrac{1}{\prod\limits_{c = 1}(1 - x^c)}\)。
我们考虑 \(g(x) = \prod\limits_{c = 1}(1 - x^c)\),通过暴力 dp 打表找规律我们发现一个很惊奇地事情
- 每一项的系数都是 \(\{0, 1, -1\}\)
- 非 \(0\) 位置的系数是 \(1, -1, -1, 1, 1, -1, -1, \dots\)
- 非 \(0\) 位置的次数是 \(0, 1, 2, 5, 7, 12, 15, 22, 26, \dots\)
- 我们考虑瞪眼法,首先这个单调递增,很好,其次我们猜测它是多项式。差分一下。
- \(1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6\dots\)
- 发现一阶差分的规律
- \(n\) 为奇数,\(c_i = (n + 1)/2\)。
- \(n\) 为偶数,\(c_i = n + 1\)。
- 前缀和还原回去
- \(n\) 为偶数,那么 \(d_n = \dfrac{n(3n + 2)}{8}\).
- \(n\) 为奇数,那么 \(d_n = \dfrac{(3n + 1)(n + 1)}{8}\)
- 如果直接按照差分数组推导,那么太困难了,但是我们知道,显然这是一个关于 \(\lfloor n / 2\rfloor\) 的二次函数,直接待定系数即可。
- 于是得到 \(g(x) = 1 + \prod\limits_{n = 1}(-1)^n x^{\frac{n(3n \pm 1)}{2}}\)。
- 这就是正五边形定理了。
- 运用正五边形定理和多项式求逆可以 \(O(n\log_2 n)\) 求出正整数划分数,从而愉快的 AC P6189
- 咋严格证明啊。我不会呢。标记
EGF
对于数列 \(\{a\}\),定义其 egf 为 \(f(x) = \sum\limits_{n = 0}\dfrac{a_i}{i!}x^i\)。
EGF 让我们很方便做这种神秘的卷积:\(h_n = \sum\limits_{m = 0}{n\choose m}f_mg_{n - m}\),接下来就应该出现 \(\dfrac{h_n}{n!} = \sum\limits_{m = 0}\dfrac{f_m}{m!} \times \dfrac{g_{n - m}}{(n - m)!}\)
这下就是 \(f, g\) 的 egf 的卷积得到了 \(h\) egf 的卷积了,非常好。
我们观察一下它的组合意义。令 \(f_i, g_i\) 分别为 A 类选了 \(i\) 个的方案数,B 类选了 \(i\) 个的方案数。那么 \(h_n\) 就是把 \(n\) 个 A 类和 B 类事物分别按照原来的顺序乖乖站好,但是 A 类 B 类交错的方案数。A 类事物和 B 类是不一样的。而 ogf 的卷积则是一样的。这是它们的区别。
封闭形式
牢牢记住
\(e^x = \sum\limits_{n = 0}\dfrac{x^n}{n!}\)
\(\ln(1 - x) = -\sum\limits_{n = 0}\dfrac{x^n}{n}\)
等比数列
- \(<1, 1, 1, 1, 1, \dots>\),生成函数 \(e^x\)
- \(<1, p, p^2, p^3, \dots>\),生成函数 \(e^{px}\)。
交错
- \(<1, -1, 1, -1, \dots>\)
- \(e^{-x} = \sum\limits_{n = 0}\dfrac{(-1)^nx^n}{n!}\)
- \(<1, 0, 1, 0, 1, \dots >\),生成函数 \(\dfrac{e^x + e^{-x}}{2}\)。
- \(<0, 1, 0, 1,0, \dots>\),生成函数 \(\dfrac{e^x - e^{-x}}{2}\)
下降幂
\(n\) 的 \(m\) 次下降幂就是 \(A_{n}^m\)。
-
对于序列 \(<A_{m}^0, A_{m}^1, A_{m}^2, \dots>\),egf 为
\(f(x) = \sum\limits_{n = 0}\dfrac{A_{m}^n}{m!}x^n \\ = \sum\limits_{n = 0}{m\choose n}x^n \\ = (1 + x)^m\)
非常的漂亮啊
\(e^{F(x)}\) 的组合意义
高贵伟大光荣正确惊天大秘密!
\(F(x)\) 是一个 egf,我们记它原序列为 \(<f_0, f_1, \dots, f_n>\)。
然后我们看看 \(e^F(x)\) 是啥,泰勒展开一下
\([x^m]e^{F(x)} = [x^m](\sum\limits_{n = 0} \dfrac{F^n(x)}{n!}) \\ = \sum\limits_{n = 0}\sum\limits_{a_1 + a_2 + \dots + a_n = m}\prod\limits_{i = 1}^n \dfrac{f_{a_i}}{a_i!}\)
因为这是 egf,原序列是要乘上一个 \(m!\)。
\(m![x^m] = \sum\limits_{n = 0}\sum\limits_{a_1 + a_2 + \dots + a_n = m}\prod\limits_{i = 1}^n \dfrac{f_{a_i}}{a_i!}m!\)
\(\dfrac{m!}{a_1!a_2!\dots a_n!}\) 实际上的意思是 \(m!\) 内多重集的排列数!
我们考虑它的组合意义:有 \(n\) 个有标号元素,\(f_m\) 代表 \(m\) 个元素(这个时候元素之间是等价的)放到一个合法集合里面的方案数,那么 \(e^{F(x)}\) 的第 \(m\) 项系数则是代表把 \(m\) 个元素划分成若干个集合的方案数。\(m!\) 内多重集的组合数相当于对 \(m\) 内的元素进行一个划分。要注意这样一点,\(f_m\) 里面可以看作是不带编号的,但是 \(e^{f(x)}\) 是带有编号的,这是要区分的。

浙公网安备 33010602011771号