前置芝士
广义二项式定理
设(alpha)是实数,对于所有满足(0leq |x| <|y|)的(x)和(y),有
其中
泰勒展开
(假设下式中的所有导数均是有意义的)
对于某个函数(f(x)),我们可以取一个使其有(n)阶导的(x_0),并利用((x-x_0))的(n)次多项式来逼近(f(x)).此时下式成立:
其中(f^{(n)}(x))为(f(x))的(n)阶导数,(R_n(x))表示余项(事实上由于生成函数都是形式幂级数,我们不需要考虑其在何处收敛,更重要的是一般题目只会要求保留前(n)项,所以OI里根本不关心(R_n(x))长啥样.)
当(x_0=0)时,(f(x))的泰勒展开即为麦克劳林级数,即
一般生成函数(Ordinary Generating Function)
定义
对于给定的数列(A),定义其一般生成函数(Ordinary Generating Function,简称OGF)(A(x))为
例子:
数列(<1,1,1,cdots>)的生成函数为(1+x+x^2+cdots).
数列(<0,1,2,cdots>)的生成函数为(0+x+2x^2+cdots).
运算
对两个生成函数(F(x),G(x)).
- 加(减)法
- 数乘
- 乘法
- 右移
- 左移
- 求导
- 积分
常见序列的OGF
根据上述运算法则,我们可以找到一些有着特殊性质的数列的OGF.
一个常数序列
考虑数列(<1,1,1,1,1>)的OGF,它是(1+x+x^2+x^3+x^4).
发现它有点像等比数列求和的形式,那么能不能把它按照等比数列求和公式写成(frac{1-x^5}{1-x})呢?
虽然看起来这时(x=1)时这个函数是无意义的,但是由于生成函数本质上是形式幂级数,所以我们并不关心它在何处收敛。我们只考虑这个函数的麦克劳林级数即可。
将上面的结论推广可以得到数列(<1,1,1,cdots>)的OGF为(frac{1}{1-x}).
更多的OGF
继续推广上面的结论,可以得到数列(<1,a,a^2,cdots>)的OGF为(frac{1}{1-ax}).
考虑一下((frac{1}{1-x})^2)是什么,它可以看成是两个(1+x+x^2+cdots)的乘积,那么新函数的第(i)项的系数等价于将(i)拆成两个非负整数的和的方案数,也就是说新函数是数列(<1,2,3,cdots>)的生成函数。
继续推广下去,(frac{1}{(1-x)^m})可以看成(m)个(1+x+x^2+cdots)的乘积,故(x^i)的系数为将(i)拆分为(m)个非负整数之和,也就是(dbinom{i+m-1}{i}).再把(x)代换为(ax),就有了这个式子:
然后拿一些东西带进去就会有一些好玩的东西:
最后还有一个(<1,frac{1}{2},frac{1}{3},cdots>),它的生成函数是(-ln(1-x)),证明的话考虑将后面那个Taylor展开即可。
例题
求数列(<0,1,4,cdots,n^2,cdots>)的生成函数
令所求的生成函数为(F(x)), 则有
最后可以得到
利用OGF求数列的通项
Fibonacci数列
已知Fibonacci数列的递推式为:
求数列(f_n)的生成函数(F(x)).
解得(F(x)=frac{1}{1-x-x^2}).
看起来我们的确完成了任务,但是这个封闭形式除了长的短以外毫无作用。
注意到那些形如(frac{1}{1-ax})的生成函数我们是能够很好的展开的,于是考虑将这个封闭形式写成若干个乘积。
令(phi=frac{1+sqrt 5}{2},hat{phi}=frac{1-sqrt5}{2}),则分母有(1-x-x^2=(1-phi x)(1-hat{phi} x)),之后我们假设(F(x)=frac{A}{1-phi x}+frac{B}{1-hat{phi}x}),最终解得(F(x)=frac{1}{sqrt 5}(frac{1}{1-phi x}-frac{1}{1-hat{phi} x})=frac{1}{sqrt 5}sum_{igeq 0}(phi^i-hat{phi}^i)x^i).
求解某些组合计数问题
生成函数在求解选取某些物品的方案数时有一些神奇的效果。
例题:有(A.B,C,D)四种物品,假设每种都有无限个,现在要求恰好拿出(n)个,其中(A)必须拿偶数个,(B)必须拿(5)的倍数个,(C)至多能拿(4)个,(D)至多能拿(1)个,求方案数。
解:分别记拿(A,B,C,D)四种物品拿(n)个的方案数的生成函数为(A(x),B(x),C(x),D(x)).那么显然有:
记最终答案的生成函数为(F(x)),根据组合意义发现有(F(x)=A(x)B(x)C(x)D(x)=frac{1}{(1-x)^2}=1+2x+3x^2+cdots).也就是([x^n]F(x)=n+1),故最终的答案就是(n+1).
指数生成函数(Exponential Generating Function)
引入及定义
考虑一下上面那个数数题,我们认为(F(x))是简单的四个生成函数相乘的结果,是因为在这里我们认为顺序不影响结果,我们只关心每一类物品选了多少个。举个例子,假设某个(n=3)的方案依次选了2个(A)物品和1个(B)物品,那么无论(B)在两个(A)之前还是之后都是同一种方案。那么假设题目开始考虑这一种情况了呢?
考虑一种只有(2)个物品且无限制的情况:假设我们当前选了(n)个(A)物品和(m)和(B)物品,那么最终是有(n+m)个物品的,考虑把这看成一个长(n+m)的序列,则有(n)个位置上是物品(A),所以在两种物品的方案数相乘的同时还有一个组合数的贡献。具体的,我们记选A物品和选B物品的方案数分别是(f_i,g_i),最终答案的(h_i),则有
我们发现,如果能把(i!)也看成是(x^i)的一部分的话,那么它们的生成函数的乘法依然和最开始的OGF是一致的,这就引出了指数生成函数(Exponential Generating Function,简称EGF).
对于给定的数列(A),定义其指数型生成函数(A(x))为:
运算
记(F(x),G(x))分别是数列(f_i,g_i)的EGF.
- 加(减)法
- 数乘
- 乘法
- 左移(?)
其中有(n^{underline{m}}=n(n-1)cdots(n-m+1)).
- 右移(?)
- 求导
- 积分
注意到,由于在OI中我们存储EGF时一般存的都是(frac{f_n}{n!}),所以要想实现(f_n)的左移和右移需要借助求导和积分。
常见数列的EGF
注意数列(f_n)的EGF和数列(frac{f_n}{n!})的OGF是等价的。
利用EGF解决某些简单的组合问题
不要忘记EGF是考虑不同种物品之间的顺序的,相对应的,OGF并不考虑。
例:用红、白、蓝三种颜色给(1 imes n)的格子染色,要求红色格子的数目是偶数,且至少有一个格子是蓝色的方案数(f_n).
解:记(f_n)的EGF为(F(x)).仿照OGF的例题,我们将三种颜色的方案数的生成函数乘起来。
故最终有
集合的EGF
考虑这样的问题:我们需要数集合(S)中元素的数量,但是集合(S)是由集合(A)中的元素拼接而成的。假设我们已知集合(A)中元素的生成函数,那么集合(S)的生成函数为(下式的(A,S)均表示函数)
例:求(n)个点的无向有标号连通图的数量(f_n), 要求无重边无自环。
解:记(n)个点的无向图的数量为(g_n). 由于(n)个点的无向图中最多有(dbinom{n}{2})条边,每条边的存在与否都会影响到方案,故有:
分别记(f_n,g_n)的生成函数为(F(x),G(x)),由于无向图可以看成是若干个无向连通图拼在一起形成的,故:
两边同时取(ln)
至于多项式如何取(ln), 并不是本文的重点。可以自行上网百度