生成函数

二项式定理

广义二项式系数\(\binom{n}m = \frac{n^{\underline{m}}}{m!}\)

广义二项式定理\((1 + x)^m = \sum_{n \ge 0} \binom{m}n x^n\)

二项式反演

\[f(n)=\sum\limits_{i=0}^n{n\choose i}g(i)\Leftrightarrow g(n)=\sum\limits_{i=0}^n(-1)^{n-i}{n\choose i}f(i) \]

\[ f(n)=\sum\limits_{i=n}^m{i\choose n}g(i)\Leftrightarrow g(n)=\sum\limits_{i=n}^m(-1)^{i-n}{i\choose n}f(i) \]

普通母函数(OCF)

性质

对于一个数列 fn,定义它的普通型生成函数为 F⁡(x)。则:

基本运算

H(x)=F(x)±G(x)

\(\left(\sum_{n \geq 0} f_{n} x^{n}\right) \pm\left(\sum_{n \geq 0} g_{n} x^{n}\right)=\sum_{n \geq 0}\left(f_{n} \pm g_{n}\right) x^{n}\)

H(x)=F(x)G(x)

\(\left(\sum_{n \geq 0} f_{n} x^{n}\right)\left(\sum_{n \geq 0} g_{n} x^{n}\right)=\sum_{n \geq 0}\left(\sum_{i=0}^{n} f_{i} g_{n-i}\right) x^{n}\)

H(x)=F(x−m)

\(\sum_{n \ge m} f_{n-m} x^{n} = \sum_{n \ge 0}f_nx^{n+m}\)

H(x)=F(x+m)

\(\sum_{n \ge 0} f_{n+m}x^n = \frac{\sum_{n \ge 0} f_nx^n – \sum_{i=0}^{m-1} f_ix^i}{x^m}\)

H(x)=F′(x)

\(\left(\sum_{n \geq 0} f_{n} x^{n}\right)^{\prime} = \sum_{n \ge 0} ((n+1)f_{n+1})x^n\)

H(x)=∫F(x)dx

\(\int\left(\sum_{n \geq 0} f_{n} x^{n}\right) \mathrm{d} x=\sum_{n>0} \frac{f_{n-1}}{n} x^{n} +C\)

H(x)=F(cx)

\(\sum_{n \ge 0} f_n(cx)^n = \sum_{n \ge 0} (c^nf_n)x^n\)

\(x^m\)

\(\begin{aligned} \sum_{n \ge 0} [n = 0] x^n &= 1 \\ \sum_{n \ge 0} [n = m] x^n &= x^m \\ \end{aligned}\)

\((1+x)^m\)

\(\begin{aligned} \sum_{n \ge 0} x^n &= \frac 1{1 – x} \\ \sum_{n \ge 0} (n+1)x^n &= \frac 1{(1 – x)^2} \\ \sum_{n \ge 0} (-1)^n x^n &= \frac 1{1 + x} \\ \sum_{n \ge 0} \binom mn x^n &= (1 + x)^m \\ \sum_{n \ge 0} \binom {n+m-1}n x^n &= (1 – x)^{-m} \\ \end{aligned}\)

e 相关

\(\begin{aligned} \sum_{n > 0} \frac{1}{n} x^n &= \ln\frac1{1-x} \\ \sum_{n > 0} \frac{-(-1)^n}{n} x^n &= \ln(1+x) \\ \sum_{n \ge 0} \frac{1}{n!} x^n &= e^x \\ \end{aligned}\)

Fibonacci

\(f_n = \begin{cases} n & n \leq 1 \\ f_{n-1} + f_{n-2} & n > 1 \\ \end{cases}\)


\(\begin{aligned}F(x) &= \sum_{n \ge 0} f_n x^n \\&= x + \sum_{n > 0} (f_n + f_{n-1}) x^{n+1} \\&= x + xF(x) + x^2F(x) \\\end{aligned}\)


\(\begin{aligned} F(x) &= \sum_{n \ge 0} f_n x^n \\ f_n &= \frac{\left(\frac{1+\sqrt5}2\right)^n – \left(\frac{1-\sqrt5}2\right)^n}{\sqrt 5} \\ \end{aligned}\)

前缀和

\(\begin{aligned} S(x) &= \sum_{n \ge 0} s_nx^n \\ &= \sum_{n \ge 0} \left(\sum_{i=0}^n f_i\right)x^n \\ &= \sum_{i \ge 0} \left(f_i \sum_{n \ge i} x^n\right) \\ &= \sum_{i \ge 0} \left(f_i \frac{x^i}{1-x}\right) \\ &= \frac{1}{1-x}\sum_{i \ge 0} f_ix^i \\ &= \frac{1}{1-x} F(x) \\ \end{aligned}\)

Catalan

\(c_n = \begin{cases} 1 & n = 0 \\ \sum_{i=0}^{n-1} c_ic_{n-i-1} & n > 0 \\ \end{cases}\)


\(\begin{aligned} C(x) &= \sum_{n \ge 0} c_nx^n \\ &= 1+\sum_{n \geq 1}\left(\sum_{i=0}^{n-1} c_{i} c_{n-i-1}\right) x^{n} \\ &= 1+x \sum_{m \geq 0}\left(\sum_{i=0}^{m} c_{i} c_{m-i}\right) x^{m} \\ &= 1 + xC^2(x) \end{aligned}\)


\(C(x)=\frac{1 – \sqrt{1-4 x}}{2 x}\)


\(\begin{aligned} \sqrt{1-4 x} &= (1-4 x)^{\frac 12} \\ &= \sum_{n \ge 0} \binom{\frac 12}n (-4x)^n \\ &= 1 + \sum_{n > 0}\frac{\left(\frac 12\right)^{\underline{n}}}{n!}(-4x)^n \\ &= 1 + \sum_{n > 0}\frac{(-1)^{n-1} (1 \times 3 \times \cdots \times (2n – 3))}{2^nn!}(-4x)^n \\ &= 1 + \sum_{n > 0}\frac{(-1)^{n-1} (2n-2)!}{2^nn!(2 \times 4 \times \cdots \times (2n-2))}(-4x)^n \\ &= 1 + \sum_{n > 0}\frac{(-1)^{n-1} (2n-2)!}{2^{2n-1}n!(n-1)!}(-4x)^n \\ &= 1 – 2\sum_{n > 0}\frac{(2n-2)!}{n!(n-1)!}x^n \\ \end{aligned}\)


\(\begin{aligned} C(x) &= \frac{1 – \sqrt{1-4 x}}{2 x} \\ &= \frac{1 – \left(1 – 2\sum_{n > 0}\frac{(2n-2)!}{n!(n-1)!}x^n\right)}{2 x} \\ &= \sum_{n \ge 0}\frac{(2n)!}{(n+1)!n!}x^n \\ &= \sum_{n \ge 0}\frac{\binom{2n}n}{n+1} x^n \\ \end{aligned}\)

Example

计算机学院有许多喜欢火火的女生。一班有2个,二班有3个,三班有2个,四班是火火的后宫,有8个喜欢火火的女生(全班女生)

如果用一个函数“f(班级)=喜欢火火女生的个数”,那么我们可以把上述信息表示成:f(1)=2,f(2)=3,f(3)=2,f(4)=8

构造这么一个多项式函数g(x),使得x的n次方系数为f(n)。

\[a0,a1,a2.....an对应的生成函数是g(x)=a0+a1x+a2x^2+...+anx^n \]

问题1.

火火在这些女生中选择自己的后宫成员,现在他对女生们的颜值等级进行排序,颜值等级为1的妹子有3个,颜值等级为2的妹子有2个,颜值等级为3的妹子有5个,颜值等级为4的妹子有5个,假设火火的后宫等级取决于所有妹子的颜值等级之和,那么火火的后宫等级共有多少种可能的情况?每种等级各有几种可能方案?

3个1级妹子可以看成

\[1+3x+3x^2+x^3 \]

其中1表示不要这个等级的妹子,3表示有三种情况只要1个1等级的妹子........同理,另外三种情况为

\[1+2x^2+x^4、1+5x^3+10x^6+10x^9+5x^{12}+x^{15}、1+5x^4+10x^8+10x^{12}+5x^{16}+x^{20} \]

则所阐述的生成函数为

\[g(x)=(1+3x+3x^2+x^3)*(1+2x^2+x^4)*(1+5x^3+10x^6+10x^9+5x^{12}+x^{15})*(1+5x^4+10x^8+10x^{12}+5x^{16}+x^{20}) \]

最后求出的式子指数表示后宫等级,系数表示方案数。

问题2

那么假如将问题1改为无限的人数呢?由于无限后宫,我们无法计算每种情况的方案数,但是可以计算出具体的方案状况,在这种情况下生成函数系数全置1

那么生成函数为

\[g(x)=(1+x+x^2+x^3+...)*(1+x^2+x^4+...)*(1+x^3+x^6+x^9+x^{12}+x^{15}+...)*(1+x^4+x^8+x^{12}+x^{16}+x^{20}+...) \]

问题3

设有n个标志为1,2,…,n的班级,第i个(i=1,2,…n)班级里放有ni个女生。不同班级里的女生是不同的,而同一班级里的女生则是没有差别的,认为是相同的。询问火火后宫从中取r个女生的方案数。

设生成函数

\[g(x)=(1+x^1+x^2+...+x^{n1})(1+x^1+x^2+...+x^{n2})... 最后指数为r的那一项的系数就是方案数。 \]

生成函数模板

#include<cstdio>
using namespace std;
int N,g[2][125];
int main(){
	while(~scanf("%d",&N)){
		for(int i=0;i<=N;++i) g[1][i]=1,g[0][i]=0;
		for(int i=2;i<=N;++i){
			for(int j=0;j<=N;++j)
			for(int k=0;k<=N-j;k+=i) g[i&1][j+k]+=g[1-(i&1)][j];
			for(int j=0;j<=N;++j) g[1-(i&1)][j]=0;
		}
		printf("%d\n",g[N&1][N]);
	}
	return 0;
}

整数拆分

\(f(x)=(1+x^1+x^2+x^3....+x^n)*(1+x^2+x^4+...)*.....(1+x^n)\)

然后首先数为n的被分数,可以由1,2,3,4,......,n组成,就是不知道选1几个,选2几个。。。

这时候我们可以看一下母函数,设选的数字为i,选的次数为k,那么x的指数可以表示为x^(i*k);

\(就像f(x)中(1+x^1+x^2+x^3....+x^n)表示1不选,1选一次,1选2次....; (1+x^2+x^4+...)表示2不选,2选1次,选2次。。。\)

那么我们要求的分解n的种数就是x^n前的系数(很容易想)。

怎么求x^n的系数呢,多项式相乘解决。

#include <iostream>
#include <string.h>
typedef long long LL;
using namespace std;
int n;
int a[105], b[105];
int main()
{
	scanf("%d", &n);
	for (int i = 0; i <= n; i++) a[i] = 1;//开始第一个多项式的系数都为1,指数为i
	for (int i = 2; i <= n; i++){//i表示选的数 
		for (int j = 0; j <= n; j++){//k为x的指数,就是选一次i,2次i。。。
			for (int k = 0; k + j <= n; k += i){//用另一个数组存储指数为j+k的x的系数,是与前一个多项式相乘
				b[j + k] += a[j];
			} 
		}
		memcpy(a, b, sizeof(b));
		memset(b, 0, sizeof(b));
	}
	printf("%d\n", a[n]);
	return 0;
}

指数型生成函数 (EGF)

OGF 可以用来解决一些无标号组合计数问题,相对地 EGF 可以用来解决一些有标号组合计数问题。

对于一个数列 fn,定义它的指数型生成函数为 F⁡(x)。则:
\(F(x) = \sum_{n \ge 0} \frac{f_n}{n!}x^n\)

基本运算

H(x)=F(x)G(x)

\(\left(\sum_{n \geq 0} \frac {f_{n}}{n!} x^{n}\right)\left(\sum_{n \geq 0} \frac{g_{n}}{n!} x^{n}\right)=\sum_{n \geq 0}\left(\sum_{i=0}^{n} \frac{f_{i} g_{n-i}}{n!}\right) x^{n} = \sum_{n \geq 0} \frac{\sum_{i=0}^{n} f_{i} g_{n-i}}{n!}x^{n}\)

e 相关

\(\begin{aligned} \sum_{n \ge 0} \frac{1}{n!} x^n &= e^x \\ \sum_{n \ge 0} [n \bmod 2 = 0] \frac1{n}x^n &= \frac{e^x + e^{-x}}{2} \\ \sum_{n \ge 0} [n \bmod 2 = 1] \frac1{n}x^n &= \frac{e^x – e^{-x}}{2} \end{aligned}\)

posted @ 2020-01-28 20:46  fytxlj  阅读(229)  评论(0)    收藏  举报