组合数学之三 —— 生成函数

来源:互联网 发布:如何开发一门编程语言 编辑:程序博客网 时间:2024/05/23 21:06

前言:我觉得生成函数是一个很玄妙的东西

知识铺垫

我们在这里简单的介绍一下几种为人熟知的数列(给出公式及部分证明):

算术数列,其中的每一项比前一项大一个常数q(等差数列)
几何数列,其中的每一项是前一项的常数q倍(等比数列)

一 . 算术数列

An=A0+nq
Sn=( n-1 ) * A0+( q * n *(n+1))/2

二 . 几何数列

An=A0*q^n
Sn=A0*( q^n-1 ) / ( q-1 ) —> (q!=1)

三 . 斐波那契数列

① f(n)=f(n-1)+f(n-2) (n>=2)
② f(0)=0,f(1)=1
③ Sn=f(0)+f(1)+f(2)+…+f(n)=f(n+2)-1

我们简单的用归纳法证明一下:
S(n+1)
=f(0)+f(1)+f(2)+…+f(n)+f(n+1)
=[f(0)+f(1)+f(2)+…+f(n)]+f(n+1)
=f(n+2)-1+f(n+1)
=f(n+3)-1

④ 斐波那契数f(n)是偶数当且仅当n能被3整除
⑤ 斐波那契数列通项公式:
这里写图片描述

⑥ 在帕斯卡三角形从左上到右下的对角线上的二项式系数的和是斐波那契数列
这里写图片描述

生成函数

简单来说,生成函数是数列的一个副产品:


h0 , h1 , h2 , … , hn , …
是一个无穷数列
ta的生成函数定义为无穷函数:这里写图片描述

形式很简单,我们主要通过例题来看一下:

∞ 例一

每一项都是1的无穷数列,ta的生成函数是?

g(x)=1+x+x^2+…+x^n+….==1/(1-x)

∞ 例二

设m是正整数,二项式系数
C(m,0),C(m,1),C(m,2),…,C(m,m)
的生成函数是?

g(x)=C(m,0)+C(m,1)x+C(m,2)x^2+…+C(m,m)x^m
根据二项式定理:这里写图片描述

g(x)=(x+1)^m

注:实际上m为任意实数,都有上式

∞ 例三(重点)

设k为整数,并设数列(h0,h2,h3,…,hn,…)由令hn等于方程(e1+e2+e3+…+ek=n)的非负整数解的数目定义?

(建议多读几遍题)
首先我们要搞清楚hn到底是什么:
实际上我们可以将问题看做:有n个1,把ta们分成k份,每一份中允许不含有任何元素
这是隔板法的经典问题:
hn=C(n+k-1,k-1)

那么hn的生成函数就是:
这里写图片描述
我们在这里先给出结论:
这里写图片描述
于是我们有:
这里写图片描述

在上面的记法中,x^ei是第i个因子的代表项,于是我们由题意得:
x^e1*x^e2*…x^ek=x^n
e1+e2+…+ek=n
这样,此生成函数x^n的系数就是n对应的答案

∞ 例四

什么样的数列的生成函数如下式?
(1+x+x^2+x^3+x^4+x^5)(1+x+x^2)(1+x+x^2+x^3+x^4)

设x^e1(0<=e1<=5) , x^e2(0<=e2<=2) , x^e3(0<=e3<=4) 分别表示第一个因子,第二个因子,第三个因子的代表项
假设:e1+e2+e3=n
则:x^e1 * x^e2 * x^e3=x^n

因此乘积中x^n的系数是e1+e2+e3=n整数解的个数hn,其中0<=e1<=5 , 0<=e2<=2 , 0<=e3<=4 ,当n>5+2+4=11时,hn=0

∞ 例五

求装有苹果,香蕉,橘子和梨的果篮的数量hn,
其中在每个果篮中苹果数是偶数,香蕉数是5的倍数,橘子最多拿4个,梨要么不拿,要么只能拿一个

我们要是用组合数学的方法,估计就要光速弃疗了。。。
于是我们用生成函数的角度去考虑:
这里写图片描述
这里写图片描述

这样我们就使用代数的方法,解决了组合数学问题!

∞ 例六

设hn为方程:3*e1+4*e2+2*e3+5*e4=n
的非负整数解得个数。求h0,h1,…,hn,…的生成函数g(x)

我们作如下变量替换:
f1=3*e1 , f2=4*e2 , f3=2*e3 , f4=5*e4
则:f1+f2+f3+f4=n
其中f1是3的倍数,f2是4的倍数,f3是2的倍数,f4是5的倍数
那我们就可以得到这样的式子:
这里写图片描述
这里写图片描述


我们在这里提出一个定理

这里写图片描述

可以评测的例题

指数生成函数

之前我们利用下面的单项式的集合为数列(h0 , h1 , h2 , h3 …)定义了生成函数:
{1,x,x^2,x^3,…}
这个生成函数特别适用于某些计数数列,特别是那些涉及二项式系数的数列,这是因为ta有二项式定理的形式
然而,对于某些计数排列的项的数列,更有效的是考虑下面单项式集合的生成函数:
{1,x,x^2/2!,x^3/3!,x^4/4!,…}
这些单项式出现在泰勒级数(e作为数学常数,是自然对数函数的底数):
这里写图片描述

数列h0,h1,h2,h3,h4,…的指数生成函数定义为:
这里写图片描述

常用指数生成函数的闭形式

这里写图片描述

这就是知识介绍,很简单明白,我们还是看一些例题:

∞ 例一

设n是正整数,确定下面数列的质数生成函数:
P(n,0),P(n,1),P(n,2),…,P(n,n)

其中P(n,k)表示n元素的k排列数目,因此对于k=0,1,…,n,这个排列的数目是n!/(n-k)!,因此指数生成函数是:
这里写图片描述

仔细一看,这x^k的系数实际上是C(n,k)
实际上这个生成函数也恰恰是下面数列的普通生成函数:
C(n,0),C(n,1),C(n,2),…,C(n,n)

∞ 例二

如果a是任意一个实数,则数列
1,a,a^2,a^3,…
的指数生成函数是:

这里写图片描述

这个时候,我们提出一个小问题:
对于正整数k,k^n表示有k种不同类型的对象且每一种对象都有无穷重数的多重集合的n排列数。因此,这个计数数列的指数生成函数就是e^kx


我们在这里提出一个定理

设S是多重集合 { n1*a1,n2*a2,n3*a3,…,nk*ak }(第i种元素ai有ni个),其中ni是非负整数
设hn是S的n排列数,那么数列(h0,h1,h2,…,hk)的指数生成函数由下式给出:

这里写图片描述

我们简单的证明一下:

这里写图片描述
是(h0,h1,h2,…,hn,…)的指数生成函数
注意,当n>n1+n2+n3+…+nk时hn=0,所以g(x)是有限和

我们把①式展开,对于一个单项式得到的应该是下面的形式:
这里写图片描述

其中:0<=m1<=n1,0<=m2<=n2,0<=m3<=n3,…,0<=mk<=nk
设 n=m1+m2+…+mk,于是上式化为:
这里写图片描述

因此在①式中x^n/n!的系数就是这个玩意。。。
这里写图片描述

其中的求和就是对所有满足下面条件的m1,m2,m3,…,mk的求和
0<=m1<=n1,0<=m2<=n2,0<=m3<=n3,0<=mk<=nk
m1+m2+m3+…+mk=n
对于确定的m1,m2,m3,…,mk,S的组合 {m1*a1,m2*a2,m3*a3,…,mk*ak} 的n排列数就是:
这里写图片描述

显然对于上式的求和,就是原问题的解
原式得证


∞ 例三

设hn表示由数字1,2,3构造的n位数的个数,其中1的个数是偶数,2的个数至少是3,而3的个数至少是4
确定最终的数列(h0,h1,h2,…,hn,….)的指数生成函数

hi(x)表示对应因子的指数生成函数:
这里写图片描述

∞ 例四

用红,白,蓝三种颜色给1*n的棋盘着色,要求红色的方格数是偶数,确定给这个棋盘着色的方法数

设hn表示这样的着色数,其中我们定义h0=1
则hn等于有3种颜色(红,白,蓝)的多重集合的n排列数,其中每一种颜色的重数是无穷
且要求红色出现的次数是偶数
我们能过得到一个生成函数(参见上文的定理):
这里写图片描述

∞ 例五

确定满足下面条件的n位数的个数hn:每个数字都是奇数且数字1和数字3出现偶数次?

设h0=1,数hn等于多重集合 { ∞*1,∞*3,∞*5,∞*7,∞*9 }的n排列中1,3出现偶数次的n排列个数
我们可以得到生成函数:
这里写图片描述

∞ 例六

确定用红,黄,蓝三色给1*n棋盘着色中,要求红格数是偶数,且至少有一个蓝格的着色方法数

这里写图片描述

可以评测的例题

原创粉丝点击