生成函数与递推关系

生成函数

这里也是结课后才补充的内容,仅作了解。

概念

先从一个简单的例子入手:今有猪肉包、牛肉包、梅菜包、三丁包、豆沙包各一;小明要吃两个,有几种吃法?

答案显然是 (52)=10\dbinom{5}{2} = 10 种。

但是换种思路,是「00 或 11 个猪肉包」「00 或 11 个牛肉包」……这样,于是就是

(x0+x1)(x0+x1)⋯=(1+x)5=1+5x+10x2+10x3+5x4+x5\begin{aligned} (x^0 + x^1)(x^0 + x^1)\cdots &= (1 + x)^5\\ &= 1 + 5x + \textcolor{FF0099}{10}x^2 + 10x^3 + 5x^4 + x^5 \end{aligned}

这样,x2x^2 的系数就是答案。

再复杂一点,若猪肉包有两个,没有牛肉包,则有几种吃法?

这会就是

(x0+x1+x2)(x0+x1)(x0+x1)(x0+x1)=1+4x+7x2+7x3+4x4+x5(x^0 + x^1 + x^2)(x^0 + x^1)(x^0 + x^1)(x^0 + x^1) = 1 + 4x + 7x^2 + 7x^3 + 4x^4 + x^5

简单来说,生成函数(generating function)是一种把无限数列表示成幂序列的系数的表示法:

F(x)=f0+f1x+f2x2+⋯F(x) = f_0 + f_1 x + f_2 x^2 + \cdots

使用 [xn]F(x)[x^n]F(x) 指代这个生成函数中 xnx^n 的系数 fnf_n。

一些额外说明:

  1. 生成函数又叫作「母函数」
  2. 这里只讨论所谓「普通(ordinary)」生成函数
  3. 不关心函数是否收敛
  4. 这里仅做直观介绍

生成函数的乘积

令

{A(x)=∑n=0∞anxnB(x)=∑n=0∞bnxn\left\lbrace\begin{aligned} A(x) &= \sum_{n=0}^{\infty} a_n x^n\\ B(x) &= \sum_{n=0}^{\infty} b_n x^n \end{aligned}\right.

有

[xn](A(x)⋅B(x))=∑k=0nakbn−k[x^n]\left(A(x) \cdot B(x)\right) = \sum_{k=0}^{n} a_k b_{n-k}

这也就是卷积(convolution)。

显然还有

{[xn](c⋅F(x))=c⋅[xn]F(x)[xn](F(α⋅x))=αn⋅[xn]F(x)\left\lbrace\begin{aligned} [x^n]\left(c \cdot F(x)\right) &= c \cdot [x^n]F(x)\\ [x^n]\left(F(\alpha \cdot x)\right) &= \alpha^n \cdot [x^n]F(x) \end{aligned}\right.

卷积规则

计数的卷积规则

令 A(x)A(x) 为从集合 A\mathcal{A} 中选择对象的计数法所对应的生成函数,B(x)B(x) 为从集合 B\mathcal{B} 中选择对象的计数法所对应的生成函数,且 A∩B=∅\mathcal{A} \cap \mathcal{B} = \empty,则 A(x)⋅B(x)A(x) \cdot B(x) 为从 A∪B\mathcal{A} \cup \mathcal{B} 中选择对象的计数法所对应的生成函数。

更严格地说,这里要求从 A∪B\mathcal{A} \cup \mathcal{B} 中选择对象的方法更像是 A×B\mathcal{A} \times \mathcal{B},即一一对应于有序对 (a,b)(a, b),其中 aa 为从集合 A\mathcal{A} 中选择对象的方法,bb 为从集合 B\mathcal{B} 中选择对象的方法。

部分分式分解

现在使用 1,2,3,41, 2, 3, 4 代称包子,买包子现在有下面的规则:

  1. 11 号必须是偶数个
  2. 22 号必须是 55 的倍数
  3. 最多买 44 个 33 号
  4. 最多买 11 个 44 号

若总共买 66 个,有以下几种方案

方案/包子编号 11 号 22 号 33 号 44 号
1 66 00 00 00
2 44 00 22 00
3 44 00 11 11
4 22 00 44 00
5 22 00 33 11
6 00 55 11 00
7 00 55 00 11

这里我们可以得到四个生成函数:

{A1(x)=1+x2+x4+⋯=11−x2A2(x)=x5+x10+x15+⋯=x51−x5A3(x)=1+x+x2+x3+x4=1−x51−xA4(x)=1+x\left\lbrace\begin{aligned} A_1(x) &= 1 + x^2 + x^4 + \cdots = \frac{1}{1 - x^2}\\ A_2(x) &= x^5 + x^{10} + x^{15} + \cdots = \frac{x^5}{1 - x^5}\\ A_3(x) &= 1 + x + x^2 + x^3 + x^4 = \frac{1 - x^5}{1 - x}\\ A_4(x) &= 1 + x \end{aligned}\right.

则

A(x)=A1(x)⋅A2(x)⋅A3(x)⋅A4(x)=11−x2⋅x51−x5⋅1−x51−x⋅(1+x)=1(1−x)2=1+2x+3x2+⋯+nxn−1+⋯\begin{aligned} A(x) &= A_1(x) \cdot A_2(x) \cdot A_3(x) \cdot A_4(x)\\ &= \dfrac{1}{1- x^2} \cdot \dfrac{x^5}{1 - x^5} \cdot \dfrac{1 - x^5}{1 - x} \cdot (1 + x)\\ &= \dfrac{1}{(1-x)^2}\\ &= 1 + 2x + 3x^2 + \cdots + nx^{n-1} + \cdots \end{aligned}

部分分式分解

设 p(x)p(x) 为次数小于 nn 的多项式,a1,⋯ ,ana_1, \cdots, a_n 为互不相同的非零数,则存在常数 c1,⋯ ,cnc_1, \cdots, c_n 使得

p(x)(1−a1x)⋯(1−anx)=c11−a1x+⋯+cn1−anx\dfrac{p(x)}{(1 - a_1 x)\cdots(1 - a_n x)} = \dfrac{c_1}{1 - a_1 x} + \cdots + \dfrac{c_n}{1 - a_n x}

求 [xn]R(x)[x^n]R(x),其中 R(x)=x1−x−x2R(x) = \dfrac{x}{1 - x - x^2}。

解答

注意到 1−x−x2=(1−a1x)(1−a2x)1 - x - x^2 = (1 - a_1 x)(1 - a_2 x),容易解得 a1=1+52, a2=1−52a_1 = \dfrac{1 + \sqrt{5}}{2},\, a_2 = \dfrac{1 - \sqrt{5}}{2}。从而

R(x)=c11−a1x+c21−a2xR(x) = \dfrac{c_1}{1 - a_1 x} + \dfrac{c_2}{1 - a_2 x}

再解得 c1=15, c2=−15c_1 = \dfrac{1}{\sqrt{5}},\, c_2 = -\dfrac{1}{\sqrt{5}},从而有

R(x)=15(11−a1x−11−a2x)R(x) = \dfrac{1}{\sqrt{5}}\left(\dfrac{1}{1 - a_1 x} - \dfrac{1}{1 - a_2 x}\right)

又

11−a1x=1+a1x+a12x2+⋯11−a2x=1+a2x+a22x2+⋯\begin{aligned} \dfrac{1}{1 - a_1 x} &= 1 + a_1 x + a_1^2 x^2 + \cdots\\ \dfrac{1}{1 - a_2 x} &= 1 + a_2 x + a_2^2 x^2 + \cdots \end{aligned}

则有

[xn]R(x)=a1n−a2n5=15((1+52)n−(1−52)n)\begin{aligned} [x^n]R(x) &= \dfrac{a_1^n - a_2^n}{\sqrt{5}}\\ &= \dfrac{1}{\sqrt{5}}\left( \left(\dfrac{1 + \sqrt{5}}{2}\right)^n - \left(\dfrac{1 - \sqrt{5}}{2}\right)^n \right) \end{aligned}

部分分式分解

分母多项式若有非零 mm 重根,则可将整个商式表示为形如 c(1−ax)k\dfrac{c}{(1 - ax)^{k}} 的项的和的形式,其中 k⩽mk \le m。

[xn]c(1−ax)k=can(n+(k−1)n)[x^n]\dfrac{c}{(1 - ax)^k} = c a^n \dbinom{n + (k - 1)}{n}

这是由 [xn]1(1−x)k=(n+(k−1)n)[x^n]\dfrac{1}{(1-x)^{k}} = \dbinom{n + (k - 1)}{n} 推出的。

常用生成函数

G(x)G(x) aka_{k} 展开式
(1+x)n(1 + x)^n (nk)\dbinom{n}{k} 1+(n1)x+(n2)x2+⋯+xn1 + \dbinom{n}{1}x + \dbinom{n}{2}x^2 + \cdots + x^n
(1+ax)n(1 + ax)^n (nk)ak\dbinom{n}{k}a^k 1+(n1)ax+(n2)a2x2+⋯+anxn1 + \dbinom{n}{1}ax + \dbinom{n}{2}a^2x^2 + \cdots + a^nx^n
(1+xr)n(1 + x^r)^n {(nkr),if r∣k0,otherwise\left\lbrace\begin{aligned} &\dbinom{n}{\frac{k}{r}}, &\text{if } r \mid k\\ &0, &\text{otherwise} \end{aligned}\right. 1+(nr)xr+(n2r)x2r+⋯+xnr1 + \dbinom{n}{r}x^r + \dbinom{n}{2r}x^{2r} + \cdots + x^{nr}
1−xn+11−x\dfrac{1 - x^{n+1}}{1 - x} {1,if k⩽n0,otherwise\left\lbrace\begin{aligned} &1, &\text{if } k \le n\\ &0, &\text{otherwise} \end{aligned}\right. 1+x+x2+⋯+xn1 + x + x^2 + \cdots + x^n
11−x\dfrac{1}{1 - x} 11 1+x+x2+⋯1 + x + x^2 + \cdots
11−ax\dfrac{1}{1 - ax} aka^k 1+ax+a2x2+⋯1 + ax + a^2x^2 + \cdots
11−xr\dfrac{1}{1 - x^r} {1,if r∣k0,otherwise\left\lbrace\begin{aligned} &1, &\text{if } r \mid k\\ &0, &\text{otherwise} \end{aligned}\right. 1+xr+x2r+⋯1 + x^r + x^{2r} + \cdots
1(1−x)2\dfrac{1}{(1 - x)^2} k+1k + 1 1+2x+3x2+⋯1 + 2x + 3x^2 + \cdots
1(1−x)n\dfrac{1}{(1 - x)^n} (n+k−1k)\dbinom{n + k - 1}{k} 1+(n1)x+(n+12)x2+⋯1 + \dbinom{n}{1}x + \dbinom{n + 1}{2}x^2 + \cdots
1(1+x)n\dfrac{1}{(1 + x)^n} (n+k−1k)(−1)k\dbinom{n + k - 1}{k}(-1)^k 1−(n1)x+(n+12)x2−⋯1 - \dbinom{n}{1}x + \dbinom{n + 1}{2}x^2 - \cdots
1(1−ax)n\dfrac{1}{(1 - ax)^n} (n+k−1k)ak\dbinom{n + k - 1}{k}a^k 1+(n1)ax+(n+12)a2x2+⋯1 + \dbinom{n}{1}ax + \dbinom{n + 1}{2}a^2x^2 + \cdots
ex\e^x 1k!\dfrac{1}{k!} 1+11!x+12!x2+⋯1 + \dfrac{1}{1!}x + \dfrac{1}{2!}x^2 + \cdots
ln⁡(1+x)\ln(1 + x) (−1)k−1k\dfrac{(-1)^{k-1}}{k} x−12x2+13x3−⋯x - \dfrac{1}{2}x^2 + \dfrac{1}{3}x^3 - \cdots

实例

斐波那契数列有

{f0=0,f1=1,fn+2=fn+1+fn\left\lbrace\begin{aligned} f_0 &= 0,\\ f_1 &= 1,\\ f_{n+2} &= f_{n+1} + f_n \end{aligned}\right.

生成函数

F(x)=f0+f1x+f2x2+⋯+fnxn+⋯F(x) = f_0 + f_1x + f_2x^2 + \cdots + f_nx^n + \cdots

则有

(1−x−x2)F(x)=f0+(f1−f0)x+(f2−f1−f0)x2+(f3−f2−f1)x3+⋯=(f1−f0)x=x\begin{aligned} (1 - x - x^2)F(x) &= f_0 + (f_1 - f_0)x + (f_2 - f_1 - f_0)x^2 + (f_3 - f_2 - f_1)x^3 + \cdots\\ &= (f_1 - f_0) x\\ &= x \end{aligned}

得 F(x)=x1−x−x2F(x) = \dfrac{x}{1 - x - x^2}。

递推关系

第二类斯特林数

第二类斯特林数:nn 个元素的集合分成 kk 个非空子集的方法数。记作 S(n,k)S(n, k) 或 {nk}\displaystyle {n \brace k}。

则有

{S(0,0)=1,S(n,0)=S(0,n)=0,n>0S(n+1,k)=k⋅S(n,k)+S(n,k−1),k>0\begin{cases} S(0, 0) = 1,\\ S(n, 0) = S(0, n) = 0, &n > 0\\ S(n + 1, k) = k \cdot S(n, k) + S(n, k - 1), &k > 0 \end{cases}

递推怎么得出来的呢?

考虑第 n+1n + 1 个元素,它可以在这 kk 个集合中任选一个加入,而前 kk 种集合划分 nn 个元素方法有 S(n,k)S(n, k) 种,从而这种情况有 k⋅S(n,k)k \cdot S(n, k) 种;当然,第 n+1n + 1 个元素也可以「自成一派」,这时候前 nn 个元素就只有 k−1k - 1 个非空子集可供选择了,此时就只有 S(n,k−1)S(n, k - 1) 种,加法原理有 S(n+1,k)=k⋅S(n,k)+S(n,k−1)S(n + 1, k) = k \cdot S(n, k) + S(n, k - 1) 种。

利用容斥原理求第二类斯特林数 S(n,k)S(n, k):

记 N={f 为满射∣f ⁣:{1,⋯ ,n}→{1,⋯ ,k}}\mathcal{N} = \bigl\lbrace f \text{ 为满射} \mid f\colon \left\lbrace 1, \cdots, n \right\rbrace \to \left\lbrace 1, \cdots, k \right\rbrace \bigr\rbrace,从而有 ∣N∣=k!⋅S(n,k)|\mathcal{N}| = k! \cdot S(n, k)(因为 N\mathcal{N} 指定了 kk 个非空子集的顺序)。

令 X={f∣f ⁣:{1,⋯ ,n}→{1,⋯ ,k}}, Xj={f∈X∣f 值域不包括 j}\mathcal{X} = \bigl\lbrace f \mid f\colon \left\lbrace 1, \cdots, n \right\rbrace \to \left\lbrace 1, \cdots, k \right\rbrace \bigr\rbrace,\, \mathcal{X}_{j} = \bigl\lbrace f \in \mathcal{X} \mid f \text{ 值域不包括 }j \bigr\rbrace,则有 ∣X∣=kn, ∣Xj∣=(k−1)n|\mathcal{X}| = k^n,\, |\mathcal{X}_{j}| = (k-1)^n,从而有

∣N∣=∣⋂j=1nXˉj∣=∣X−⋃j=1nXj∣=kn−(∑j=1k(−1)j+1(kj)(k−j)n)=∑j=0k(−1)j(kj)(k−j)n\begin{aligned} |\mathcal{N}| &= \left\lvert \bigcap_{j=1}^n \bar{\mathcal{X}}_{j} \right\rvert\\ &= \left\lvert \mathcal{X} - \bigcup_{j=1}^n \mathcal{X}_{j}\right\rvert\\ &= k^n - \left( \sum_{j=1}^{k}(-1)^{j+1}\dbinom{k}{j}(k - j)^n \right)\\ &= \sum_{j=0}^{k}(-1)^j\dbinom{k}{j}(k - j)^n \end{aligned}

即

S(n,k)=1k!∑j=0k(−1)j(kj)(k−j)nS(n, k) = \frac{1}{k!} \sum_{j=0}^{k}(-1)^j\dbinom{k}{j}(k - j)^n

物体分配到盒子里的方法计数

  1. nn 个不同物体分配到 kk 个不同的盒子中,使第 ii 个盒子包含 nin_i 个物体(i=1,⋯ ,ki = 1, \cdots, k)
    • (nn1,⋯ ,nk)\dbinom{n}{n_1, \cdots, n_k}
  2. nn 个不同物体分配到 kk 个相同的盒子中,不允许空盒
    • 第二类斯特林数 S(n,k)S(n, k)
  3. nn 个相同物体分配到 kk 个不同的盒子中
    • (n+k−1n)\dbinom{n + k - 1}{n}
  4. nn 个相同物体分配到 kk 个相同的盒子中,不允许空盒
    • 无简单解析式

鸽笼原理

鸽笼原理

若要将 nn 只鸽子放到 mm 个笼子中,且 m<nm<n,则至少有一个笼子要装 22 个或更多的鸽子。


若 ∣A∣>∣B∣|A| > |B|,则不存在从 AA 到 BB 的单射。

鸽笼原理的推广

若要将 nn 个物体放到 mm 个盒子中,且 m<nm<n,则至少有一个笼子需容纳 ⌈nm⌉\left\lceil \dfrac{n}{m}\right\rceil 个或更多物体。


换言之,若 ∣A∣>k⋅∣B∣|A| > k \cdot|B|,对于任何一个 f ⁣:A→Bf\colon A \to B,它把至少 k+1k+1 个 AA 中的不同元素映射到 BB 中的同一个元素。

拉姆齐数(Ramsey number)

拉姆齐数(Ramsey number)R(k,l)=nR(k, l) = n 是最小的 nn 使 nn 个人中至少有 kk 个人互相认识或至少有 ll 个人互相不认识。