8.13.14 ACM-ICPC 多项式与生成函数:指数生成函数
指数生成函数简介
指数生成函数(Exponential Generating Function,EGF)是生成函数的一种,常用于处理组合数学中的排列和相关问题。一个序列 a={an}a = \{a_n\}a={an} 的指数生成函数定义为:
相比于普通生成函数,指数生成函数在处理涉及排列和计数的问题时非常有用,特别是在涉及递归和递推关系的情况下。
指数生成函数的基本运算
加法与减法
类似于普通生成函数,两个序列 aaa 和 bbb 的指数生成函数分别为 A(x)A(x)A(x) 和 B(x)B(x)B(x)。那么:
因此,A(x)±B(x)A(x) \pm B(x)A(x)±B(x) 是序列 {an±bn}\{a_n \pm b_n\}{an±bn} 的指数生成函数。
乘法
对于乘法运算,我们有:
因此,A(x)B(x)A(x)B(x)A(x)B(x) 是序列 {∑k=0n(nk)akbn−k}\left\{ \sum_{k=0}^{n} \binom{n}{k} a_k b_{n-k} \right\}{∑k=0n(kn)akbn−k} 的指数生成函数。
常见例子
序列 a={1,1,1,⋯ }a = \{1, 1, 1, \cdots\}a={1,1,1,⋯}
序列 a={1,1,1,⋯ }a = \{1, 1, 1, \cdots\}a={1,1,1,⋯} 的指数生成函数是:
A(x)=∑n=0∞xnn!=exA(x) = \sum_{n=0}^{\infty} \frac{x^n}{n!} = e^xA(x)=∑n=0∞n!xn=ex
序列 a={1,2,3,4,⋯ }a = \{1, 2, 3, 4, \cdots\}a={1,2,3,4,⋯}
序列 a={1,2,3,4,⋯ }a = \{1, 2, 3, 4, \cdots\}a={1,2,3,4,⋯} 的指数生成函数是:
A(x)=∑n=0∞nxnn!A(x) = \sum_{n=0}^{\infty} n \frac{x^n}{n!}A(x)=∑n=0∞nn!xn
考虑到 n=xddxxn−1n = x \frac{d}{dx} x^{n-1}n=xdxdxn−1,我们可以得到:
指数生成函数的应用
贝尔数的生成函数
贝尔数 BnB_nBn 计数将 nnn 个不同元素分成若干非空集合的不同方式。贝尔数的指数生成函数为:
B(x)=eex−1B(x) = e^{e^x - 1}B(x)=eex−1
这个生成函数的推导涉及到组合数学中非常重要的包涵-排除原理和斯特林数。
递归关系的解决
指数生成函数在求解递归关系时非常有用。例如,考虑以下递归关系:
an=an−1+n⋅an−2a_n = a_{n-1} + n \cdot a_{n-2}an=an−1+n⋅an−2
我们可以利用指数生成函数来简化并求解这样的递归关系。
实际例题
例题1:排列问题
设有 nnn 个不同的物品,要将它们排列成一排,求出所有可能的排列数。
我们知道,对于 nnn 个不同物品,它们的排列数为 n!n!n!。所以,这个问题的指数生成函数为:
例题2:分组问题
设有 nnn 个不同的物品,要将它们分成 kkk 组,每组至少有一个物品,求出所有可能的分组数。
对于这个问题,我们可以利用指数生成函数和贝尔数来解决:
结论
指数生成函数是一个强大而灵活的工具,特别适用于处理排列和组合问题。通过掌握指数生成函数的基本运算和应用方法,可以大大简化复杂的递推关系和计数问题。无论是在竞赛编程还是在组合数学的研究中,指数生成函数都是不可或缺的利器。