生成函数
生成函数(母函数)
对于一个数列$A=${$a_0,a_1,a_2,a_3,...$},存在函数$$F(x)=\sum_{i=0}^{\infty} a_i*x^i$$则称函数$F(x)$为数列$A$的生成函数(母函数)。
需要注意的是 生成函数的实际值与自变量没有任何意义,我们在意的只是他的每一项系数与指数。
生成函数相乘(卷积)可以用来解决类似求相加得到某个数的方案数
例如现在有可重正整数集合$A,B$,要求把$A$中任意一个元素$a$和$B$中任意一个元素$b$相加得到一个结果,求得到每一个数的方案数。
设$numa[x],numb[x]$分别为$x$在$A,B$中的个数,则有
$$A(x)=\sum_{i=0}^{\infty} numa[i]*x^i , B(x)=\sum_{i=0}^{\infty} numb[i]*x^i$$
有以下公式:
$$A(x)*B(x)=(\sum_{i=0}^{\infty} numa[i]*x^i)*(\sum_{i=0}^{\infty} numb[i]*x^i)=\sum_{i=0}^{\infty} \sum_{j=0}^i numa[j]*numb[i-j]*x^i$$
所以将$A(x)$与$B(x)$利用NTT卷积,得到的多项式每一项系数即为答案。
泰勒展开
对于一个函数$f(x)$和在其定义域内的值$x_0$,若$f(x)$在$x_0$处存在任意阶导数(多项式就是典型的例子),则定义$f(x)$在$x_0$处的泰勒展开为
$$f(x)=\sum_{i=0}^{\infty} \frac{ f^{(i)}(x_0)(x-x_0)^i}{i!}$$
通常情况下,$x_0$可以取0,即
$$f(x)=\sum_{i=0}^{\infty} \frac{ f^{(i)}(0)x^i}{i!}$$
一些常用的泰勒展开:
$$e^x=\sum_{i=0}^{\infty} \frac{x^i}{i!}$$
$$e^{-x}=\sum_{i=0}^{\infty} (-1)^i\frac{x^i}{i!}$$
$$\frac{e^x+e^{-x}}{2}=\sum_{i=0}^{\infty} \frac{x^{2i}}{{2i}!}$$
$$\frac{e^x-e^{-x}}{2}=\sum_{i=0}^{\infty} \frac{x^{2i+1}}{(2i+1)!}$$
指数型生成函数
对于一些排列与组合的问题,我们引入指数型生成函数:
$$G(x)=\sum_{i=0}^{\infty} \frac{x^i}{i!}$$
这种函数同样满足以上的性质。
例: 给定四种颜色abcd给长度为N的格子染色,要求颜色ab个数必须为偶数,求方案数。
可以写出生成函数:
$$(\sum_{i=0}^{\infty} \frac{x^{2i}}{(2i)!})^2(\sum_{i=0}^{\infty} \frac{x^{i}}{i!})^2=(\frac{e^x+e^{-x}}{2})^2(e^x)^2=\frac{e^{4x}+2e^{2x}+1}{4}$$
$$=\frac{1}{4}+\frac{\sum_{i=0}^{\infty} 4^i\frac{x^{i}}{i!} + 2\sum_{i=0}^{\infty} 2^i\frac{x^{i}}{i!}}{4}=\frac{1}{4}+\sum_{i=0}^{\infty} \frac{4^i + 2^{i+1}}{4} \frac{x^{i}}{i!}$$
于是答案即为$\frac{4^N + 2^{N+1}}{4} $