组合数学之生成函数

1 生成函数

  • $a_n$的ordinary generating function(ODF):

1.1 组合

  • 例1: $(x_0+x_1)^3$的展开式表示了3元集的所有子集, $(1+x)^3$的展开式的$x_k$系数表示了$k-$子集的数量
  • 例2: 3红4蓝5绿球, 选$k$球的方法, 即$(1+x+x^2+x^3)(1+x+x^2+x^3+x^4)(1+x+x^2+x^3+x^4+x^5)$展开式中$x^k$的系数

1.2 斐波那契数

其中$\phi = \frac{1+\sqrt 5}{2}$, $\phi = \frac{1-\sqrt 5}{2}$

因此

2 解递归式

  • 步骤如下:
    • 给出$a_n$递归式:
    • 求$G(x)=\sum_{n\ge 0}a_nx^n$, 将右侧处理至含$G(x)$
    • 解出$G(x)$的表达式
    • 展开后, $x_n$的系数为$a_n$

2.1 生成函数的代数操作

生成函数算术操作

2.2 展开生成函数

2.2.1 泰勒展开

2.2.2 几何序列

  • 例如$G(x)=\sum_{i=1}^k\frac{a_i}{1-b_ix}$, 因此$a_n=\sum_{i=1}^k a_ib_i^n$

2.2.3 二项式定理

例子: 多重集$S=\{x_1,x_2,\cdots, x_n\}$

其中$m$是$S$中可能的多重集中的$x_i$的重数

因此

3 卡特兰数

  • $C_n$例子:
    • $n$对括号合法匹配的个数
    • $n+1$个数相乘, 不同的加括号方法
    • $n+1$叶节点的full binary tree的数量
    • $n\times n$方格中不超过对角线上方的monotonic paths的数量
    • $n+2$边凸多边形的三角形分割数
    • stack-sortable permutations of $\{1,\cdots, n\}$
    • tile a stairstep shape of height n with n rectangles

3.1 解卡特兰数

卡特兰数递归式: $C_0=1$, 对于$n\ge 1$, $C_n=\sum_{k=0}^{n-1}C_kC_{n-1-k}$

因为$\lim _{x\to 0}G(x)=C_0=1$

所以

4 快排分析

递归式

$T_0=T_1=0$, 而 $T_n = \frac{1}{n}\sum_{k=1}^n(n-1+T_{k-1}+T_{n-k})$

解OGF

  • 详见讲义, 注意卷积的使用