斯特林数
生成函数:
我们可以将多项式看成一个数组 \((a_0,a_1,\cdots,a_{n-1})\),当然这个数组得是有限的,那如果这个数组是无限的会发生什么呢?
形式幂级数的定义:
若 \(a_0,a_1,\cdots\) 是域 \(F\) 上的序列,则称 \(a_0+a_1x+a_2x^2+\cdots=\displaystyle\sum_{k=0}^{\infty}a_kx^k\) 是 \(F\) 上 的一个形式幂级数,即所有 \(F\) 上的形式幂级数的集合为 \(F[[x]]\)。
形式幂级数的加减法就是按位加减,乘法就是卷积。
对于一个序列 \(a_0,a_1,\cdots\),它所对应的形式幂级数被称为 \(\{a_k\}_{k=0}^{\infty}\) 的普通生成函数;序列 \(b_k=\dfrac{a_k}{k!}\) 的生成函数被称为 \(\{a_k\}_{k=0}^{\infty}\) 的指数生成函数。生成函数一般指普通生成函数。
下面是本文会用到的三个幂级数:
- \(e^x=\displaystyle\sum_{k=0}^{\infty}\dfrac{x^k}{k!}=1+x+\dfrac{x^2}{2}+\dfrac{x^3}{6}+\dfrac{x^4}{24}+\cdots\);
- \((1+x)^{\alpha}=\displaystyle\sum_{k=0}^{\infty}{\alpha\choose k}x^k=1+\alpha x+\dfrac{\alpha(\alpha-1)}{2}x^2+\dfrac{\alpha(\alpha-1)(\alpha-2)}{6}x^3+\cdots\),这是广义二项式定理。
- \(\ln(1+x)=\displaystyle\sum_{k=1}^{\infty}\dfrac{(-1)^{k-1}x^k}{k}=x-\dfrac{x^2}{2}+\dfrac{x^3}{3}-\dfrac{x^4}{4}+\cdots\)。
生成函数解递推式:
就以斐波那契数列为例,令 \(f_i\) 为斐波那契数列的第 \(i\) 项,设 \(F(x)\) 是它的生成函数。由于 \(f_{k+2}=f_{k+1}+f_k\),所以我们有 \(F(x)-1=xF(x)+x^2F(x)\)(这种生成函数解方程的方式很常见,有时可能还是微分方程,比如 Bell 数),这样我们可以解得 \(F(x)=\dfrac{1}{1-x-x^2}\),我们可以对这个分式做部分分式分解,将其变简单,更方便使用广义二项式定理展开。令 \(\phi=\dfrac{1+\sqrt 5}{2}\),则 \(F(x)=\dfrac{\dfrac{1}{\sqrt 5}}{\dfrac{1}{\phi}-x}-\dfrac{\dfrac{1}{\sqrt 5}}{\dfrac{1}{1-\phi}-x}\),由广义二项式定理,\(\dfrac{1}{t-x}=\displaystyle{k=0}^{\infty}\dfrac{x^k}{t^{k+1}}\),所以 \(F(x)=\dfrac{1}{\sqrt 5}\sum_{k=0}^{\infty}(\phi^{k+1}-(1-\phi)^{k+1})x^k\)。那么就有斐波那契数列的通项公式:
生成函数还有很多的用途,比如下面要讲的斯特林数,以及卡特兰数和贝尔数。
第二类斯特林数 / 第二类 Stirling 数:
第二类斯特林数的定义:
将一个 \(n\) 元集合划分为 \(k\) 个非空子集的方案数称为第二类斯特林数 \(\displaystyle{n\brace k}\)。
当 \(0\le n<k\) 时,补充定义 \(\displaystyle{n\brace k}=0,{n\brace 0}=[n=0]\)。
比如 \(\displaystyle{4\brace 2}=7\),二二型:
一三型:
共有 \(3+4=7\) 种。
第二类斯特林数的递推公式:
考虑第 \(n\) 个元素,它可以单独构成一个集合,方案数为 \(\displaystyle{n-1\brace k-1}\),随便加入一个集合,方案数为 \(\displaystyle k{n-1\brace k}\),所以就有:
第二类斯特林数通项公式:
考虑 \(n\) 个球放在 \(k\) 个盒子内,需要保证每个盒子非空,那么方案数为 \(a_k=k!\displaystyle{n\brace k}\),如果不保证盒子非空,枚举有多少个盒子非空,那么方案数为 \(\displaystyle\sum_{i=0}^k{k\choose i}a_i\),其实方案数也是 \(n^k\),那么就有 \(k^n=\displaystyle\sum_{i=0}^k{k\choose i}a_i\),由二项式反演可得:\(a_k=\displaystyle\sum_{i=0}^k(-1)^{k-i}{k\choose i}i^n\),即:
这个式子固定了 \(n\),我们可以快速求出一行内所有第二类斯特林数的值。(具体怎么做在下面讲)
同一列第二类斯特林数的指数生成函数:
先给出结论:
考虑 \((e^x-1)^k\) 的 \(p\) 次项系数,\(\displaystyle\sum_{i_1+i_2+\cdots+i_k=p}[i_1,i_2,\cdots,i_k\ge 1]\dfrac{1}{i_1!i_2!\cdots i_k!}=\dfrac{1}{p!}\displaystyle\sum_{i_1+i_2+\cdots+i_k=p}[i_1,i_2,\cdots,i_k\ge 1]{p\choose i_1,i_2,\cdots,i_k}\),考虑其组合意义,就是将 \(p\) 个球放到 \(k\) 个相同的盒子里的方案数除以 \(p!\),而 \(\dfrac{\displaystyle{p\brace k}}{p!}\) 正是这个方案数除以 \(k!\),所以证毕。