【组合数学】 03 - 母函数和递推关系

1. 母函数

1.1 母函数的定义

  计数问题的结果一般可以表示为自然数集上的函数\(f(n)\),比如组合数\(\binom{n}{k}\)可以看成是关于\(k\)的函数。孤立的通项公式很难发现数值之间的内在联系,从而丢失了结果的整体性。本节介绍一下欧拉提出的母函数思想,它是计数问题的一个基本工具。

  你一定知道组合数\(\binom{n}{k}\)其实是二项式\((1+x)^n\)的系数,换个角度想就是多项式\((1+x)^n\)中包含了整个数列\(\{\binom{n}{k}\}\)。利用单个对象来表示多个离散的对象,即方便了表示,也保留了离散对象的整体性,这对讨论想必是有好处的。为此对数列\(\{a_n\}\),称幂级数(1)为其母函数(gernerating function)。

\[g(x)=\sum_{k=0}^{\infty}a_kx^k=a_0+a_1x+a_2x^2+\cdots\tag{1}\]

  这里并不要求幂级数收敛,我们只需把它当成是一种代数定义。和普通多项式一样,可以在上面定义类似的相等、加法、数乘、乘法(不考虑它们的现实意义),可以证明这样的代数构成了一个整环。在抽象代数中已经证明了,多项式有逆的充要条件是\(a_0\ne 0\)。比如常用的\(1+x+x^2+\cdots=\dfrac{1}{1-x}\),其中\(1-x\)就是前者的逆。

  这里例子让我们想起了泰勒展开式,应该怎样看待一个初等函数与它的泰勒级数之间的关系?这些初等函数(比如\(\dfrac{1}{1-x}\))并不属于代数系统,但却可以作为对应幂级数的“缩写”形式存在。对于这些初等函数在复数域函数上的运算结果,它的幂级数是否与原代数系统的相同?多项式整环中的运算是兼容复数域多项式的,所以这两者可以看成是等价的,因此在使用时,大可放心地使用幂级数和初等函数。而这一点也为问题解决带来了便捷,正是母函数思想的威力所在。

1.2 母函数的应用

  母函数除了作为一个形式表示,还能有做什么?代数系统中为什么要讨论加法、乘法?加法的意义不言而喻,一个计数问题被分为多个个独立的情况,在求得每个情况的母函数后,整个问题的母函数自然就是母函数之和。这其实就是大家在高中熟悉的加法原理,只不过母函数中包含了所有\(n\)的值。

  还有一个就是所谓乘法原理:一个计数问题被分为多个步骤,每步的个数相乘便是整个计数值。乘法原理也可以用母函数表示,母函数相等后展开,其中的每一项就体现了乘法原理,当然合并同类项时就是加法原理。你可能已经发现,母函数乘法其实就是在帮你“自动”完成计数的“穷举法”,相比较技巧性强的方法,母函数更具一般性。

  当然母函数也有应用场景的限制,问题的条件往往是多个变量的和为定值\(N\),而项\(a_kx^k\)表示变量取值\(k\)时有\(a_k\)种方法,母函数相乘后取项\(x^N\)的系数便是计数值。还拿二项式\(\binom{n}{k}\)为例,它表示从\(n\)个互异对象中选出\(k\)的个数。这里的变量就是每个对象被取的次数(只能是\(0,1\),母函数为\(1+x\)),条件是变量和为\(k\)。整个母函数是\((1+x)^n\),其中\(x^k\)的系数便是\(\binom{n}{k}\)。

  值得注意的是\((1+x)^n\)中包含了所有\(k=0,1,\cdots,n\)的所有值,它们被做为一个整体保存了下了,之间的关系也更便于讨论(下一篇阐述)。关于母函数在计数问题中的应用,我们将在下一篇中有更多的例子,这里先就此打住。

   求证:边长为正整数周长为\(k\)的三角形个数的母函数为\(T(x)=x^3(1-x)^{-1}(1-x^3)^{-1}(1-x^4)^{-1}\)。(提示:排序和差值)

2. 递推关系

2.1 递推关系的定义

  有时候数列是以递推关系表达的,或者计数问题本身就适合用递推求解(比如经典的斐波那契数列\(f(n+2)=f(n+1)+f(n)\)),现在我们需要把递推式转化为显式表达式、或者表示出母函数。先来看定义,式(2)的所示的关系叫\(r\)阶递推关系,显然数列\(\{a_n\}\)由它的前\(r\)项唯一确定,这\(r\)项也称递推关系的初始条件。需要提醒的是,\(r\)阶的意思是\(a_n\)最多和\(r\)个前序数列相关,但并不一定每一项都与\(r\)个前序数列相关。反之,如果递推式不存在这样的有限整数\(r\),它被称为无穷阶递推关系

\[a_n=F(a_{n-1},\cdots,a_{n-r},n)\tag{2}\]

  举个简单的例子,大家都熟悉古老的汉诺塔(hanoi)游戏,把\(n\)个圆盘按从大到小的顺序放在一根柱子上,要求保持上小下大的关系将圆盘全部移到另一根柱子上。经过分析,最小的移动步骤是这样的:先设法将上面\(n-1\)个移动到第二根柱子,再将最大的盘移到第三根柱子,最后将那\(n-1\)个圆盘也移到第三根柱子。这个过程显然有递推式\(f(n)=2f(n-1)+1\),求解就很简单了。得到递推关系也许并不是一件容易的事,但这里我们不关心这一步,假定已经获得了递推式表达式,注意力集中在求解上。

2.2 线性递推关系

  递推关系式千变万化,不可能有统一的解法,具体问题需要具体分析,大部分形式都不一定能求解。这里我们只研究几种常见递推式,并试图寻找各自一般的解法。首先比较简单的是一阶阶线性递推关系(3),为了消除首项系数,设\(\prod\limits_{k=0}^na(k)=A(n)\),并设\(u‘_n=\dfrac{u_n}{A(n)}\),则有\(u‘_n=u‘_{n-1}+b(n)/A(n)\)。\(u‘_n\)比较容易求得,最后得到\(u_n\),这里就不展开了。特别地,当\(a(n),b(n)\)为常数时,可以得到\(u_n\)通项式(4),汉诺塔问题便可求解。

\[u_n=a(n)u_{n-1}+b(n)\tag{3}\]

\[u_n=au_{n-1}+b\;\Rightarrow \;u_n=\dfrac{1-a^n}{1-a}b+a^nu_0\tag{4}\]

  当线性递推关系上升到\(r\)时,情况变得复杂,我们不妨从最简单的齐次线性常系数递推关系(式(5))看起。将递推关系的每个表达式按列写成矩阵(6),观察矩阵的每一行,它们含有完整的数列(除开始有限项)。这就启发我们把数列当整体看待,自然想到用母函数\(U(x)=\sum\limits_{k=0}^{\infty}u_kx^k\),为方便讨论,这里先假设\(u(x)\)有正的收敛域,后面得到表达式再回头验证。

\[u_n=\sum_{i=1}^rc_iu_{n-i}\tag{5}\]

\[\begin{matrix}u_r&u_{r+1}&\cdots&u_n&\cdots\\c_1u_{r-1}&c_1u_r&\cdots&c_1u_{n-1}&\cdots\\c_2u_{r-2}&c_2u_{r-1}&\cdots&c_2u_{n-2}&\cdots\\\vdots&\vdots&\ddots&\vdots&\cdots\\c_ru_0&c_ru_1&\cdots&c_ru_{n-r}&\cdots\end{matrix}\tag{6}\]

  因为第一行的母函数是其它行之和,综合考察每行母函数与\(U(x)\)的差别,不难得到\(U(x)=U(x)\sum\limits_{k=1}^rc_kx^k+h(x)\),从而有式(7)。记\(c(x)\)为式(8),其中\(\alpha_k\)是\(c(x)\)的互异复根,它被称为递推式(5)的特征多项式。则易知式(7)的分母为\((1-\alpha_1x)^{e_1}\cdots(1-\alpha_sx)^{e_s}\),利用有理分式的知识可知,式(7)可以拆分为若干项\(\dfrac{\beta_{ij}}{(1-\alpha_ix)^j}\)之和(\(\beta_{ij}\)为常数)。再利用\((1-\alpha x)^{-k}\)的泰勒展开式\(\sum\binom{n+k-1}{k-1}\alpha^kx^k\),容易知道\(x^n\)项的系数为\(\sum\limits_{k=1}^sp_k(n)\alpha_k^n\),其中\(p_k(x)\)阶为\(e_k-1\)。

\[U(x)=\dfrac{h(x)}{1-c_1x-\cdots-c_rx^r},\;\text{deg}\,(h(x))<r\tag{7}\]

\[c(x)=x^r-c_1x^{r-1}-\cdots-c_r=(x-\alpha_1)^{e_1}\cdots(x-\alpha_s)^{e_s}\tag{8}\]

  这其实就得到了\(u_n\)的表达式(9),每个\(p_k(n)\)含有\(e_k\)个待定系数,总共正好有\(r\)个待定数,而它们可以有\(r\)个初始条件确定。斐波那契数列的递推式\(f(n)=f(n-1)+f(n-2)\)就是典型的齐次递推关系,它的特征方程是\(x^2-x-1\),两个根为\(\alpha_{1,2}=(1\pm\sqrt{5})/2\),将\(f(0)=f(1)=1\)带入\(f(n)=p_1\alpha_1+p_2\alpha_2\)便得到斐波那契数列的通项公式(10)。

\[u_n=p_1(n)\alpha_1^n+p_2(n)\alpha_2^n+\cdots+p_s(n)\alpha_s^n,\;\text{deg}\,(p_k(x))=e^k-1\tag{9}\]

\[f(n)=f(n-1)+f(n-2),\,f(0)=f(1)=1\;\Rightarrow\;f(n)=\dfrac{1}{\sqrt{5}}(\alpha_1^{n+1}+\alpha_2^{n+1})\tag{10}\]

  再来看线性常系数递推关系式(11),在给定初始条件时,它也有唯一解\(u_n\)。对于这样的问题,先忽略初始条件说不定可以降低一些难度,针对递推式(11)的特点,说不定可以“目测”出一个解\(u‘_n\)。注意到\(u_n-u‘_n\)满足齐次递推式(5),故它们的解正好相差一个式(5)的解(两个初始条件的差作为式(5)的初始条件)。某个初始条件下式(11)的解\(u‘\)被称为特解,它的通解则是式(12)。

\[u_n=\sum_{i=1}^rc_iu_{n-i}+g(n)\tag{11}\]

\[u_n=u‘_n+\sum_{k=1}^sp_k(n)\alpha_k\tag{12}\]

2.3 卷积递推关系

  最后来看一个虽然复杂但却极为常用的递推关系,先来看一个问题:将\(n\)个\((\)和\(n\)个\()\)排列开来,有多少中排法使得序列有意义?有意义是指:(1)一对括号\(()\)是有意义的;(2)如果序列\(A,B\)有意义,那么\(AB\)和\((A)\)也有意义。记有意义的排列数为\(C_n\),其中\(C_0=C_1=1\)。第一个显然是\((\),先找到和它配对的\()\),则序列可以表示为\((A)B\)。要使得排列有意义,必须\(A,B\)都有意义,故容易有递推式(13)。

\[C_n=C_0C_{n-1}+C_1C_{n-2}+\cdots+C_{n-1}C_0,\;\;C_0=C_1=1\tag{13}\]

  满足递推关系(13)的数列被称为卡特兰(Catalan)数列,这个递归关系会出现在许多问题中,这里再列举几个例子,推导思路非常相似(二分和递归),这里就不赘述了。

  (1)乘法组合问题。对于乘法\(x_0x_1\cdots x_n\),添加括号使其形成不同的乘法顺序。

  (2)进出栈序列。\(n\)个数依次进栈,中途可以有数出栈,求进、出栈序列的个数。

  (3)找钱问题。\(n\)个人拿5元、\(n\)个人拿10元排队买5元的东西,如何排队使得不需要提前准备零钱。

  (4)数列个数问题:正整数列\(a_1\leqslant a_2\leqslant\cdots\leqslant a_n\),其中\(a_k\leqslant k\)。

  (5)凸多边形的三角形分割。\(n+2\)边凸多变形可以被\(n-1\)条不交叉的对角线分成\(n\)个三角形,讨论某一条边被划分的情况。

  (6)Dyck路计数。从格点\((0,0)\)走到\((2n,0)\),每步只能走向右上或右下方向最近的格点,且不能到达\(x\)轴下方。

  对于和式\(S=\sum\limits_{k=0}^nx^ky^{n-k}\),在数学中非常常见,比如说级数相乘的柯西乘积。\(S\)往往被称为向量\((x_0,x_1\cdots,x_n)\)和\((y_0,y_1\cdots,y_n)\)的卷积(Convolution,或柯西乘积),它是向量乘积的一种定义。回顾级数的柯西乘积,我们觉得这里用母函数处理也许会比较好。为此设卡特兰数列的母函数为\(C(x)\),还是先假定它有正收敛域。

  利用级数的柯西乘积,容易有\(C(x)C(x)=(C(x)-1)/x\),解得\(C(x)=\dfrac{1\pm\sqrt{1-4x}}{2x}\)。展开\(C(x)\)的幂级数,并根据数列为正可得到卡特兰数列(14)。

\[C_n=\dfrac{1}{n+1}\binom{2n}{n}\tag{14}\]

  上面两个例子充分展示了母函数在求解递推关系中的威力,观察递推关系的特点,列出母函数的方程,便可以很快得到母函数,更甚者可以得到数列通项。请尝试解决以下二元递推关系:

   \(\left\{\begin{matrix}a_{n+1}-a_n+b_n=n\\a_n+2b_{n+1}-b_n=2\end{matrix}\right.\),已知\(a_0,b_0\)。

时间: 2024-11-07 19:13:38

【组合数学】 03 - 母函数和递推关系的相关文章

组合数学之母函数问题

母函数问题是组合数学中非常经典的问题,大概是本科二年级的课程,很有意思的一门课,当然也是很精深的一门课. 定义 对于序列a0,a1,a2,-构造函数G(x): 则称函数G(x)是序列a0,a1,a2,-的母函数. 很明显,根据二项展开式,很容易知道(1+x)^n是序列C(n,0),C(n,1),-,C(n,n)的母函数.如果已知序列a0,a1,a2,-则对应的母函数G(x)便可根据定义给出.反之,如若已经求得序列的母函数G(x),则该序列也随之确定. 将序列a0,a1,a2,-记为{an} Ex

【组合数学】 01 - 关于“摆放”的科学

在中学大家都学过<排列组合>,计算机系的在大学里还学过<离散数学>.不同于主流数学中的研究对象(连续变量),它们主要讨论离散对象之间的布局.这些问题随处可见,最多见于形形色色的智力趣题和数学游戏.它们涉及的数学知识比较初等,但需要很强的技巧和脑力,至今未解的世界难题也是俯拾皆是.精确概括这些问题的共同点也是比较困难的,解法本身也没有形成统一的理论体系,往往以各种松散的方法和技巧为主. 宽泛地讲,能算作离散对象的学科非常多,它甚至可以包括逻辑学.代数学和几何学,这些已经形成理论体系的

组合数学 随记

组合数学 1.母函数 母函数(生成函数): 生成函数有普通型生成函数和指数型生成函数两种(本题是普通型). 形式上,普通型母函数用于解决多重集的组合问题, 指数型母函数用于解决多重集的排列问题. 母函数还可以解决递归数列的通项问题(例如使用母函数解决斐波那契数列,Catalan数的通项公式). 1.普通母函数:  /*hdu2082*/ 构造母函数G(x), G(x) = a0 + a1*x + a2* + a3* +....+ an*,  则称G(x)是数列a0,a1…an的母函数. 通常普通

清华大学计算机研究生课程表

清华大学计算机研究生课程表 计算机系研究生课程介绍 组合数学课程名称:组合数学 课程编号:60240013 课内学时: 48 开课学期: 秋 任课教师:黄连生 [主要内容] 主要介绍组合数学的基本内容,包括基本记数方法.母函数与递推关系.容斥 原理与鸽巢原理.Burnside引理与Polya定理.区组设计与编码的初步概念.线性规划问题的单纯形算法. 数据结构课程名称:数据结构 课程编号:60240023 课内学时: 48 开课学期: 春秋 任课教师:严蔚敏 [主要内容] 线性表.树.图等各种基本

算法分类合集(转)

ACM 所有算法 数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列双端队列可并堆左偏堆 二叉查找树Treap伸展树 并查集集合计数问题二分图的识别 平衡二叉树 二叉排序树 线段树一维线段树二维线段树 树状数组一维树状数组N维树状数组 字典树 后缀数组,后缀树 块状链表 哈夫曼树 桶,跳跃表 Trie树(静态建树.动态建树) AC自动机 LCA和RMQ问题 KMP算法 图论 基本图算法图广度优先遍历深度优先遍历拓扑排序割边割点强连通分量Tarjan算法双连通分量强连通分支及其缩点图的割边和

ACM算法目录

数据结构 栈,队列,链表 •哈希表,哈希数组 •堆,优先队列 双端队列 可并堆 左偏堆 •二叉查找树 Treap 伸展树 •并查集 集合计数问题 二分图的识别 •平衡二叉树 •二叉排序树 •线段树 一维线段树 二维线段树 •树状数组 一维树状数组 N维树状数组 •字典树 •后缀数组,后缀树 •块状链表 •哈夫曼树 •桶,跳跃表 •Trie树(静态建树.动态建树) •AC自动机 •LCA和RMQ问题 •KMP算法 ******************************************

ACM所有算法

ACM 所有算法 数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 二分图的识别 平衡二叉树 二叉排序树 线段树 一维线段树 二维线段树 树状数组 一维树状数组 N维树状数组 字典树 后缀数组,后缀树 块状链表 哈夫曼树 桶,跳跃表 Trie树(静态建树.动态建树) AC自动机 LCA和RMQ问题 KMP算法 图论 基本图算法图 广度优先遍历 深度优先遍历 拓扑排序 割边割点 强连通分量 Tarjan算法 双

算法分类合集

ACM 所有算法 数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列双端队列可并堆左偏堆 二叉查找树Treap伸展树 并查集集合计数问题二分图的识别 平衡二叉树 二叉排序树 线段树一维线段树二维线段树 树状数组一维树状数组N维树状数组 字典树 后缀数组,后缀树 块状链表 哈夫曼树 桶,跳跃表 Trie树(静态建树.动态建树) AC自动机 LCA和RMQ问题 KMP算法 图论 基本图算法图广度优先遍历深度优先遍历拓扑排序割边割点强连通分量Tarjan算法双连通分量强连通分支及其缩点图的割边和

组合数学 - 母函数 --- 模板 + 详解

Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8341    Accepted Submission(s): 5674 Problem Description People in Silverland use square coins. Not only they have square shapes but