生成函数GeneratingFunction

生成函数GeneratingFunction

极限

\(\forall \rightarrow\)对于
\(\exists \rightarrow\)存在
极限:\(\forall \epsilon,\exists N,N>n,|a_n-A|<\epsilon\)
就是说,对于所有(任意小的非负整数)\(\epsilon\)存在\(N\),使得\(a_n\)与A的差值小于\(\epsilon\)
我们就把\(A\)叫做此序列的极限\(\lim_{n\rightarrow\infty}a_n=A\)

有限数列没有极限!

若数列中的值全部相同的也没有极限!

\(\{1,\frac{1}{2},\frac{1}{3},\frac{1}{4},...\}的极限是0\)

\(\{1,0,0,0,0,0,...\}\)的极限是0

导数

To be continued:D

泰勒公式

To be continued:D

生成函数

如何简短的表示一个序列呢?
\(\left\{1,1,1,1,1,1,1,...\right\}\)
我们以一多项式来表达,以x的指数为下标,系数为值,就可以得到
\(A=\left\{1*x^0,1*x^1,1*x^2,1*x^3,...\right\}\)

\(A=\left\{1,x,x^2,x^3,...\right\}\)
注意,这个序列的长度是无限的

\[\because A=1+x+x^2+x^3+...\\ \therefore x*A=x+x^2+x^3+...\\ \therefore (1-x)A=1\\ \therefore A=\frac{1}{1-x} \]

\(\frac{1}{1-x}\)就是生成这个序列的函数,也就是说,它就是生成函数

类似的,可以得到:

\[\frac{2}{1-x}=2,2,2,2,2,2...\\ \frac{1}{1+x}=1-x+x^2-x^3...=1,-1,1,-1,...\\ \frac{1}{1-2x}=1+2x+4x^2+8x^3...=1,2,4,8,...\\ \]

当然,生成函数支持加法和乘法(上面已经有例子了)

\[\frac{1}{1+x}+\frac{1}{1-x}=\frac{2}{1-x^2}\\ 1,1,1,1,...+1,-1,1,-1,...=2,0,2,0,...\\ \frac{1}{1-x^2}=1,0,1,0,...\\ \frac{x}{1-x^2}=\frac{1}{1-x}-\frac{1}{1-x^2}=0,1,0,1,...\\ \]

还有

\[令A=1+3x+5x^2+7x^3+...\\ \therefore xA=1x+3x^2+...\\ \therefore (1-x)A=1+2x+2x^2+...\\ \because \frac{2}{1-x}=2+2x^2+...\\ \therefore \frac{2x}{1-x}=2x+2x^2+...\\ \therefore 1+\frac{2x}{1-x}=1+2x+2x^2+...\\ \therefore (1-x)A=1+\frac{2x}{1-x}\\ \therefore A=\frac{1+\frac{2x}{1-x}}{1-x}=\frac{1+x}{(1-x)^2}\\ \]

\[令B=1+4x+9x^2+16x^3+25x^5+...\\ \therefore xB=1x+4x^2+9x^3+...\\ \therefore (1-x)B=1+3x+5x^2+...\\ \therefore (1-x)B=A=\frac{1+x}{(1-x)^2}\\ \therefore (1-x)B=\frac{1+x}{(1-x)^3} \]

如何生成有限数列呢?

\[\because A=1,x,x^2,x^3,...\\ \therefore x^4A=x^4+x^5+x^6+...\\ \therefore (1-x^4)A=1+x+x^2+x^3\\ 又\because A=\frac{1}{1-x}\\ \therefore (1-x^4)\times\frac{1}{1-x}=\frac{1-x^4}{1-x}=1+x+x^2+x^3 \]

如果对生成函数求导会如何?

\[(\frac{1}{1-x})'=\frac{1}{(1-x)^2}=1+2x+3x^2+4x^4+...\\ (\frac{1}{1-x})''=\frac{1}{(1-x)^3}=1+3x+6x^2+10x^4+15x^5+... \]

这里旨在于告诉你很多数列均可以用生成函数表示

此外的

\[F=1+1x+2x^2+3x^3+5x^4+...\\ \therefore F=\frac{1}{1-x-x^2}\\ 对于方程1-x-x^2=0\\ 解得x_1=\frac{1+\sqrt{5}}{2},x_2=\frac{1-\sqrt{5}}{2}\\ 用配方法倒推得1-x-x^2=(1-x_1)\times(1-x_2)\\ 设F=\frac{1}{1-x-x^2}=\frac{a}{1-x_1}+\frac{b}{1-x_2}\\ ...\\ To be continued:D \]

当然,普通生成函数的用处不止于此

有一些水果,求选苹果偶数个,选梨5的倍数个,橘不超过4个,桃最多一个,求选共n个水果的方案数

这咋办?还好,我们有生成函数!

众所周知,普通生成函数的乘积就是组合数(你又知道?)
我们让i次项系数作为组合数

\[C=A+B=\sum_{n=0}^\infty(a_i+b_i)x_n \rightarrow 加法原则\\ C=A\times B=\sum_{n=0}^\infty\sum_{i=0}^{n}(a_i*b_{(n-i)})x_n\\ c_n=\sum_{i=0}^{n}(a_i*b_{(n-i)})x_n \rightarrow 乘法原则 \]

故得\(i\)次项系数即为相加为i的生成函数的所有方案数

苹果的生成函数:\(1+x^2+x^4+x^6+...=\frac{1}{1-x^2}\)
梨:\(1+x^5+x^{10}+...=\frac{1}{1-x^5}\)
橘:\(1+x+x^2+x^3+x^4=\frac{1-x^5}{1-x}\)
桃:\(1+x=\frac{1-x^2}{1-x}\)
相乘求组合,\(\frac{1}{1-x^2}\times\frac{1}{1-x^5}\times\frac{1-x^5}{1-x}\times\frac{1-x^2}{1-x}=\frac{1}{(1-x)^2}\)
发现恰为\(1+2x+3x^2+4x^4+...\)所以输出n即可
6!

但是,并不是所有题目都如此凑巧,我们还得算\((1+x^2+x^4+x^6+...)\times(1+x^5+x^{10}+...)\times ...\)

所以,我们将给出一个模板,旨在于做\(\uparrow\)上面的小乘法

//这里是一个用背包装物品的模板

c1[0]=1,l1=0;
//x[i]-->物品大小
//y[i]-->物品个数
for (int i = 1; i <= n; i++)//遍历物品
{
    l2 = l1 + x[i] * y[i];//预计的最高次数
    memset(c2, 0, sizeof(int) * (l2 + 1));//清空
    for (int j = 0; j <= y[i] && j * x[i] <= l2; j++)
        //当然,如果物品无限多不需要判断j <= y[i]
        for (int k = 0; k <= l1 && j * x[i] + k <= l2; k++)
            c2[j * x[i] + k] += c1[k];
    memcpy(c1, c2, sizeof(int) * (l2 + 1));//储存计算结果
    l1 = l2;
}
//最后,c1[n]表示装满大小k的背包的方案数

其实,看到这你也能发现,它可以用背包实现,但与背包相比,生成函数可快
普通生成函数只能解决组合问题!!!

指数生成函数

普通生成函数只能解决组合问题!!!

但是指数生成函数可以解决排列问题:D

To be continued:D

posted @ 2023-04-29 15:45  ssj_233  阅读(27)  评论(0编辑  收藏  举报