Skip to content

08 A Function Is Worth Many Numbers.Generating Functions

Ordinary Generating Functions

Recurrence Relations and Generating Functions

一个池塘,每年年底从里面打捞100个青蛙,青蛙自身每年繁殖四倍,若初始时青蛙有50只,第年有多少青蛙呢。
,很容易写出递归式,但是如果只想知道第87年的青蛙数量,就必须从1开始逐个计算,浪费了很多中间结果。
为了避免这种情况,需要知道的显式公式(explicit formula),只依赖于而不包含或其他项,是可以直接计算得到值的。
先从这个递归式开始 都成立且初始值。事实上上面的公式包含无穷个式子,从无穷个式子归纳出一个显式公式,就需要用到生成函数(generating functions)的概念。

Definition 8.1. 是实数序列。形式幂级数(formal power series)称之为序列的普通生成函数(ordinary generating function)。

下面计算序列的生成函数。对两边同乘然后对求和。得到 由于,所以生成函数 生成函数是幂级数,将右侧也写作幂级数的形式,那么对应的系数既为 对应的系数是
第二项稍微复杂一些,要用到微分方程课学到的部分函数(partial function)方法。 对应系数相等,所以,那么,因此第二项可以写作 结合两项得到 现在验证下是正确的。时,很容易计算得到 现在总结一下已知递归式求显式的步骤: 1. 定义序列的生成函数 2. 将递归式写作包含的方程。一般是递归式两边同乘,有时需要同乘,然后对所有非负数求和 3. 求解 4. 找到的系数

Example 8.2. 一个账户由1000块钱,年利率百分之五。然后每年存500。求第年账户有多少钱。
Solution 很容易写出递归式,下面利用上面总结的步骤来求解。 1. 定义序列的生成函数 2. 递归式两边同乘然后求和得到 3. 因此 4. 现在找的系数 结合以上两式,得到

下面这个例子来展示如何用这个方法将包含多项的递推式写作显式公式。
Example 8.3. 时,令,求
Solution。递归式的两边同乘 所以

Products of Generating Functions

前面的例子只有一个生成函数,下面讨论若干个生成函数的积。
Lemma 8.4. 是两个序列,是对应的生成函数,令,那么 也就是说,的系数是
Proof 两个无限和相乘,就是第一个和的每一项乘以第二个和的每一项,然后求和。形如,其指数若是,那么,证毕。

Theorem 8.5. (The Product formula) 在个元素集合上构建某种结构有种方式,在另一个个元素集合上构建另外某种结构有种方式。将集合分成两个间隔可空),表示在上构建第一种结构并且在上构建第二种结构的方式数。表示对应的生成函数,那么 Proof.上构建第一种结构有种方式,在上构建第二种结构有种方式,的取值范围是,那么,这就回到了Lemma 8.4.

Example 8.6. 某技术大学某学期有天。教授分成两个部分,前天学习理论,后天实践。教授从前一个部分选择一天作为假期,从后一个部分选择两天作为假期。问有多少种方式来安排这个学期。
Solution. 令有种方式安排这学期,那么最直接的方式是 ,但是这个很难写成闭型(没有求和号)。
换个思路,有种方式从第一部分选择一天,有 种方式从第二部分选择两天,其中。对应的生成函数是x^m。从出发求导,可以得到 序列的生成函数,因此 所以

上述那里需要多次求导。

这个问题从之前学习的计数角度来看,可以看作往天里面加一个隔板隔开,然后从个里面选择4个,分别是第一个假期、隔板、两天的假期。

Example 8.7. 假设不设置假期,而是从两个部分选择一些天来自习。问有多少种方式来安排这个学期。
Solution.是从前一部分选择一些天来自习的方式数的生成函数,个元素的集合有个子集,那么,注意从0开始,因为前一个部分可以没有任何自习。后一个部分的生成函数也是。那么 显然,因此 所以

Theorem 8.5可以扩展到任意固定数量的生成函数。下面这个例子展示了其一般性。

Example 8.8.天的学期分成三部分,从第一部分任意选择一些天作为假期,从第二部分选择奇数天作为假期,从第三部分选择偶数天作为假期。
Solution.为对应序列的生成函数。从天中选择任意天数的方式有种,那么;集合的子集中有奇数个元素的集合数是时是0,所以;类似地,若子集元素是偶数,时集合数是时是1,因为0本身是偶数,所以
利用二项式定理, 因此 所以

Example 8.9. 表示将分成大小不超过的若干部分的分法,那么 Solution. 考察右边的系数。右边是部分相乘,令第部分形式为,其指数之和是,也就是说。将写成相加,一般地,将写成相加。那么这就是的分割方式,其最大块不超过
右边每个都对应一个的分割方式且满足题意;相反地,每一个满足题意的分割都对应于右边的一个

在第五章,已经证得也是将分成最多部分的分割数,那么也是这些分割的生成函数。
这个生成函数不是闭形式,那有什么用呢?一是很多数学软件可以提供扩展形式,进而可以获得很多值。二是通过它可以推得更多信息(见下一例题),甚至比精确得公式更多。

Example 8.10. 表示将所有分割的数量,那么 Solution. 和上一个例子类似,只是右边是无限项罢了。

Example 8.11. 表示分成奇数块的分割数,表示分成若干个各不相同的块的分割数,求证两者相等。
Solution. 关键的核心思想是:证明两者的生成函数相等。 的分母是奇数才会留下来,否则和分子可以进行约分。

The Catalan Numbers

某人往瓶子每天往一个瓶子中放入一枚硬币或者取出一枚硬币,第一天放之前瓶子是空的,天之后,瓶子刚好也是空的。问有多少种不同的方式放入和取出硬币呢?
表示事件的总数,显然。严格地说,是序列的个数。关键信息是对于所有的,不等式都成立,因为瓶子不能有负数个硬币,称这样的长度为的序列为好序列(good sequences)。
的生成函数。很快能看到可以用生成函数的积来解决这个问题。下面要论证的是将好序列分成两个结构的对,其中一个的生成函数是,另一个是
找到除第一天外第一个瓶子为空的一天,不妨令其为天,那么从天是长度为的好序列
个序列不仅是好序列,还满足当时,,称为非常好(very good)的序列。一个非常好的序列一定是1开头-1结尾的,去掉这两个,构成了一个好序列,所以得到了一个双射,长度为的非常好的序列和长度为的好序列一一对应。
换句话说,时,长度为非常好的序列的个数是,从开头的分析可知时个数是0,所以其生成函数是
序列被分成了两个部分,一个非常好的序列和一个好序列,利用生成函数的积得到 上式从1开始,所以左边是而不是
整理上式得到 根据求根公式知道上式有两个根,分别是 已知第一项是1,带入,得到

关于带入,可以参考我提的问答

Example 4.16. 求得}{n}x^n,所以 所以}{n+1}。
称为卡特兰数(Catalan numbers),以法国和比利时数学家Eugène Catalan命名。从0开始前几个卡特兰数是

Compositions of Generating Functions

Definition 8.12.是形式幂级数,是包含常数项0的形式幂级数,那么

Theorem 8.13.是在个元素的集合上构建某种结构的不同方式的个数,且。令是将集合分成若干个不相交非空区间,然后在各个区间构建指定结构的个数,且,那么 注意,这个和Theorem 8.5. 不同的地方在于区间要非空,因为没有指定区间的个数,若允许非空,那么中间插入不同个数的空区间,那么结果是无穷大。
Proof. 沿着Theorem 8.5. 的证明继续,表示将集合分成个区间,然后构建指定结构的方式的个数的生成函数。对累加,得到。由于,幂级数中没有一项有非零的常数项,同时,有常数项1。那么

Example 8.14. 个士兵站成一行,长官将其分成非空的若干个小单元,然后每个单元指定一个指挥官。求有种方式去做这个事情。
Solution.表示从个士兵的单元中指定一个指挥官的方式的个数,显然,那么(参考Example 8.6),所以 是序列的生成函数。
分母有两个根,那么 所以,,那么 注意,所以括号内的第一项分子分母同乘,第二项分子分母同乘,那么 的系数是,因此时,系数是1,开始的前几项分别是

Theorem 8.13. 没有对这些区间组成的集合做任何事情,比如上个例子中长官没有要求若干个小单元选出一个值班,或者重新站成一列。下面对这方面进行泛化。

Theorem 8.15. [组合公式(The Compositional formula)] 令表示在个元素的集合上构建第一类结构的方式的个数,并且。令表示在个元素的集合上构建第二类结构的方式的个数,并且。令表示下述操作的个数:将个元素的集合分成若干个非空区间,在每个区间上构建第一类结构,然后在区间组成的集合上构建第二类结构,分别表示的生成函数,那么 Proof. 假设将分成部分,那么有中方式在区间上构建第二类结构,根据生成函数的积可以得到在个区间上对每个区间构建第一类结构的生成函数是,那么对于分成部分这种情况,求和

Example 8.16. 个士兵,分成若干个非空小单元,选择其中一些单元(可空)值夜班。求有多少种不同方式做这个事情。
Solution. 只是分成若干个非空区间,并不需要构建什么结构,那么时,。从个区间选择值班的小单元,有种方式。因此,因此 所以时,有种方式。

Exponential Generating Functions

Recurrence Relations and Exponential GeneratingFunctions

不是所有的递归关系都能通过普通生成函数找到一个闭形式,其中一些是因为闭形式的公式不存在,有一些可以用其他形式的生成函数来求解。

Example 8.17.。求
由于这个序列增长的太快了如果用普通生成函数求解,很快会遇到麻烦而无法给出一个闭形式的公式。需要利用下面这个概念。

Definition 8.18.为一实数序列。幂级数称为序列的指数生成函数(exponential generating function)。
式,,这就是指数的含义。

Solution.是序列的指数生成函数。和用普通生成求解递归式一样,将递归式两边同乘,然后对求和 左边是,右边第一项是,所以 第一项对于的系数是,第二项其系数是,因为其被加数等价于。因此

Example 8.19.。求显式的
Solution.是序列的指数生成函数。两边同乘,然后对求和 所以

Products of Exponential Generating Functions

Lemma 8.20.是两个序列,是其指数生成函数。那么a_ib_{n-i}对应的指数生成函数满足 也就是说的系数是
Proof. 和证明Lemma 8.4类似,相乘就是其每一项互乘。一般形式是 当且仅当时,其指数是

Theorem 8.21 (Product formula, exponential version). 在个元素集合上构建某种结构有种方式,在另一个个元素集合上构建另外某种结构有种方式。将集合分成两个不相交集合表示在上构建第一种结构并且在上构建第二种结构的方式数。表示对应的生成函数,那么 Theorems 8.5类似但有所不同,Theorems 8.5要求更高,是两个区间,相当于将个数排成一列,中间加一个隔板分成两个子集;但是Theorem 8.21没有这个要求,可以自由的分成任意两个子集。
Proof. 个元素,那么有 种方式来选取集合,在其上构建第一种结构有种方式,有种方式在上构建第二种结构,对求和,那么a_ib_{n-i},再使用Lemma 8.20即可。

Example 8.22. 一个足球队个人,分成两组,第一组可以穿橘黄色、白色或蓝色的T恤,第二组只能穿红色T恤,然后每组列队成一行。问有多少种方式?
Solution. 假设第一组有个人,那么穿不同T恤的方式有,站成一行有种,所以,其指数生成函数是 第二组有个人,那么,其指数生成函数是 那么 的系数

Example 8.23. 是固定正整数,求第二类斯特林数的指数生成函数
Solution. 分成块,对于每一块,什么也不需要做,即一种方式。那么对于每一块,生成函数是 根据乘法公式,那么生成公式是,对于分成部分,顺序不重要,所以 的系数就是。对上式使用二项式定理,可以得到和Theorem 7.5一样的结论。

指数生成函数有一个很有用的性质。由可知

Example 8.24.是贝尔数的指数生成函数。求证
Solution. 贝尔数递归性质是, n\geq 0并且。递归式两边同乘并求和得到 左边是,根据Lemma 8.20可知右侧是,因此 带入,左侧是,因此。那么 进而

Compositions of Exponential Generating Functions

Theorem 8.25 (The Exponential formula). 令是在个元素的集合上构建某种结构的不同方式的个数,且。令是将集合分成若干个非空子集,然后在各个区间构建指定结构的个数,且是对应的指数生成函数。那么 Proof.Example 8.23类似,分成个子集且不在意顺序,指数生成函数是。对求和得到,由于并且幂级数中没有常数项,但有常数项1。因此

微积分中有下面这个等式 另一方面 所以

Example 8.26.个人分成若干组,每组围着一组桌子坐。问多少种坐法?
Solution. 个人围着桌子坐有种坐法,,那么 利用指数公式 因此有种不同的坐法。

Example 8.27. 有序列种方式将集合分成大小为3、4、9的块,求其指数生成函数
Solution.表示将集合分成大小只能是3、4、9的块的方法的个数,是其对应的指数生成函数。令表示集合能组成一个大小为3的块,显然,它的指数生成函数是。根据Theorem 8.25 同理。 现在将分成三个子集(可空),将第一个子集分成大小都是3的块,第二个子集分成大小都是4的块,第三个子集分成大小都是9的块。所以

Theorem 8.28 (Compositional formula, Exponential version). 令表示在个元素的集合上构建第一类结构的方式的个数,并且。令表示在个元素的集合上构建第二类结构的方式的个数,并且。令表示下述操作的个数:将集合分成若干个非空子集,在每个自己上构建第一类结构,然后对所有子集组成的集合构建第二类结构,且分别是序列的指数生成函数,那么 Proof 不妨设将分成个子集。个子集上构建第一类结构的指数生成函数是,有种方式在个子集组成的集合上构建第二类结构,那么根据Theorem 8.21个子集时的指数生成函数。,并且中没有常数项,但是有常数项1,所以

Example 8.29.张不同的纸牌。将其分成非空的若干组,要求每组是偶数张牌,对每一组进行排序,然后将这些组排成一行。求有种排列方式。
Solution 且是偶数时,是奇数时,。显然。因此 所以 是奇数的时候,的系数是0;时,系数是。所以对于偶数

Exercises

(7) 表示Example 8.14定义的序列,表示Exercise 5定义的序列(斐波那契数列)。使用双射直接证明(不能使用递归关系或者生成函数)。
Solution 表示将分成1或2的composition。任意一个composition个1和个2。对于这些1和2,从左向右读,遇到2标记为非指挥官,第一次遇到1标记为指挥官,第二次遇到1标记为小单元的分隔符,以此类推,第次遇到1标记为指挥官,第遇到1标记为小单元的分隔符。那么创建了个单元,指定了个指挥官。
比如composition,对应的,其中是非指挥官,是指挥官,是单元的分隔符。
刚好相反。将中的还原成2,将还原成1得到相应的

(10) 的子集中任意两个元素的差至少是3的子集个数,求的生成函数。
Solution 考虑这样一个子集。若不在里面,则有种选择;若在该子集,那么显然不能在,那么有种选择。所以 显然,,递归式乘以且对求和 所以

(16) 表示满足如下条件的单调函数的个数:从的函数,且对于任意。求
Solution 不妨设是集合中最大的满足的值。根据题意,总是成立的。那么在上的函数种可能性。对于是不可能的。根据题意,根据前面假设,那么,并且 还可以写作,上式可以写作 ,上式说明集合的后段()有种可能性。因此当时有 。两边同乘且对求和 上式与一致,所以/(n+1)。

(18) 一条路径从原点,可走的步数是,且要求不能超过对角线表示满足这些条件的路径的数量。求生成函数被称为Schr ̈oder numbers
Solution 首先找到递归式。如果第一步是,那么有种路径,否则不妨设第一个和对角线的焦点是,那么后半段有种路径,前半段有种路径。前者很明显,后者的是因为不能和对角线相交,那么第一步一定是,最后一步一定是从向上到
时,递归式是。两边同乘且对求和 另外一个根的常数是-2而不是1,所以排除了。

(20) 当时,满足下述递归式 。求指数生成函数
Solution

我的解体思路与答案略微不同。

两边同乘并求和

(23) 表示将分成每部分都是奇数的composition的个数。求生成函数
Solution 分成每个部分都是奇数的composition等价于分成奇数长度的区间。区间是奇数的时候,对应序列的值是1,否则是0,所以生成函数。根据Theorem 8.13,联合若干个区间得到的生成函数是