【笔记】普通生成函数
0 前置芝士
0.1 等比数列
\(a_i=a_{i-1}q\Rightarrow a_i=a_1q^{i-1}\)
\(S=\sum\limits_{i=1}^n a_i\Rightarrow qS=\sum\limits_{i=2}^{n+1}a_i=S-a_{n+1}+a_1\)
\(\Rightarrow S=\dfrac{a_1(q^n-1)}{q-1}\)
0.2 泰勒级数
若 \(f\) 在 \(x_0\) 处能被展成多项式的形式,那么有:
\[F(x_0)=\sum_{n=0}^{+\infty}\frac{f^{(n)}(x_0)}{n!}(x-x_0)^{n}
\]
我们称这个 \(F(x_0)\) 为 \(f\) 在 \(x_0\) 上的泰勒级数。
特别地,\(x_0=0\) 时,称其为 \(f\) 的麦克劳林级数。
泰勒展开,本质就是用一个无限项的多项式去拟合一个函数。
0.3 求导
0.3.1 单项式求导
生成函数里面常用的求导,就是单项式。法则如下:
\[\left(x^a\right)^\prime=ax^{a-1}
\]
0.3.2 求导间的运算
-
\((f(x)\pm g(x))^\prime=f^\prime(x)\pm g^\prime(x)\)
-
\((f(x)g(x))^\prime=f^\prime(x)g(x)+g^\prime(x)f(x)\)
-
链式法则: \(f(g(x))^\prime=g^\prime(x)\cdot f^\prime(g(x))\)
看上去左右两边有相同项,有点奇怪,但实际上就是:整体求导乘上内层求导。
1 定义
本质上她是一种形式的东西。
对于一个数列 \(a_i\),定义她的 普通生成函数 (OGF) 为一个多项式 \(F(x)\),满足:
\[F(x)=\sum_{i=0}^{+\infty}f_ix^i
\]
2 封闭形式
生成函数 和 封闭形式 的关系(?
一个 有限的初等函数的线性组合 \(f\) 成为 封闭形式,当且仅当,下述两个条件满足其一:
-
\(f\) 不论取值,与 封闭形式 恒等。
-
对于 \(\dfrac 1 {1-x}\) 这个封闭形式。
这个东西,实际上只有在 \(|x|<1\) 的时候,原多项式才收敛,且值与 封闭形式 相等。
如果只用关心多项式的系数(比如生成函数),并不关心这个多项式的收敛,此时 封闭形式 可以理解成用有限的初等函数对无限项的多项式的简写。
\(\large\color{red}\star\) 封闭形式中的代换问题
出现收敛的问题的几个必要条件:
- 代换 \(x\) 的时候;
- 生成函数是无限项的。eg. \(\dfrac 1{1-x}\)
如果带进到生成函数以后,她的常数项或者第 \(i\) 次项系数变成无穷了或者其他不收敛的情况就有问题了。
特别地,如果封闭形式形如 \(\dfrac{1}{1-x}\),这个时候,我们一个多项式 \(T(x)\) 去代换 \(x\),直接检查 \(\left|[x^0]T(x)\right|<1\),即为是合法。
一个例子:
-
对于封闭形式 \(\exp(x)\),考虑将 \(x+1\) 代换 \(x\),这是可以的。
因为对于原生成函数 \(F(x)=\begin{aligned}\sum_{k=0}^{+\infty}\frac1{k!}x^k\end{aligned}\) ,将 \(x+1\) 带入,有:
\[F(x)=\sum_{k=0}^{+\infty}\frac1{k!}(x+1)^k\\
[x^0]F(x)=\sum_{k=0}^{+\infty}\frac1{k!}=e
\]
由于她的常数项是收敛的,后面的系数也一定更小,进而收敛。所以这是可以的。
具体原理的话,等学了高数再来扯。
2.1 常用的封闭形式
\[\begin{array}{ccc}
\text{数列}&\text{生成函数}&\text{封闭形式}&\\
\langle 1,1,1,1, \ldots\rangle & \sum\limits_{k=0}^{+\infty} x^{k} & \dfrac{1}{1-x} \\
\left\langle 1, c, c^{2}, c^{3}, \ldots\right\rangle & \sum\limits_{k=0}^{+\infty} c^{k} x^{k} & \dfrac{1}{1-c x} \\
\left\langle\left(\begin{array}{l}
n \\
0
\end{array}\right),\left(\begin{array}{l}
n \\
1
\end{array}\right),\left(\begin{array}{l}
n \\
2
\end{array}\right), \ldots,\left(\begin{array}{l}
n \\
n
\end{array}\right)\right\rangle & \sum\limits_{k=0}^{n}\left(\begin{array}{l}
n \\
k
\end{array}\right) x^{k} & (1+x)^{n} \\
\left\langle 1, n,\left(\begin{array}{c}
n+1 \\
2
\end{array}\right),\left(\begin{array}{c}
n+2 \\
3
\end{array}\right), \ldots\right\rangle & \sum\limits_{k=0}^{+\infty}\left(\begin{array}{c}
n+k-1 \\
k
\end{array}\right) x^{k} & \dfrac{1}{(1-x)^{n}} \\
\left\langle\left(\begin{array}{l}
0 \\
n
\end{array}\right),\left(\begin{array}{l}
1 \\
n
\end{array}\right),\left(\begin{array}{l}
2 \\
n
\end{array}\right),\left(\begin{array}{l}
3 \\
n
\end{array}\right), \ldots\right\rangle & \sum\limits_{k=0}^{+\infty}\left(\begin{array}{l}
k \\
n
\end{array}\right) x^{k} & \dfrac{x^{n}}{(1-x)^{n+1}} \\
\left\langle\left(\begin{array}{l}
\alpha \\
0
\end{array}\right),\left(\begin{array}{c}
\alpha \\
1
\end{array}\right),\left(\begin{array}{c}
\alpha \\
2
\end{array}\right),\left(\begin{array}{l}
\alpha \\
3
\end{array}\right), \ldots\right\rangle & \sum\limits_{k=0}^{+\infty}\left(\begin{array}{l}
\alpha \\
k
\end{array}\right) x^{k} & (1+x)^{\alpha} \\
\left\langle 0,1,-\dfrac{1}{2}, \dfrac{1}{3},-\dfrac{1}{4}, \ldots\right\rangle & \sum\limits_{k=0}^{+\infty} \dfrac{(-1)^{k+1}}{k} x^{k} & \ln (1+x) \\
\left\langle 0,1, \dfrac{1}{2}, \dfrac{1}{3}, \dfrac{1}{4}, \ldots\right\rangle & \sum\limits_{k=0}^{+\infty} \dfrac{1}{k} x^{k} & \ln \dfrac{1}{1-x} \\
\left\langle 1,1, \dfrac{1}{2}, \dfrac{1}{6}, \dfrac{1}{24}, \ldots\right\rangle & \sum\limits_{k=0}^{+\infty} \dfrac{1}{k !} x^{k} & e^{x}
\end{array}
\]
2.1.1 从 生成函数 到 封闭形式 的简单推导
前三个是 OIwiki 上面的的,还没来得及改。
-
\[F(x)=\sum_{n\ge0}[n\ne0]x^n\color{red}{=\sum_{n\ge1}x^n}\\
F(x)x+x=F(x)\Rightarrow F(x)=\dfrac{x}{1-x}
\]
-
\[F(x)=\sum_{n\ge0}(n\bmod2+1)x^n\color{red}{=\sum_{n\ge0}x^{2n}}\\
F(x)x^2+1=F(x)\Rightarrow F(x)=\dfrac{1}{1-x^2}
\]
-
1
-
法一 (myself
先求:
\[a=\left \langle 1,1,1,\cdots \right \rangle \\
F_1(x)=\sum_{n\ge0}x^n\\
F_1(x)x+1=F_1(x)\Rightarrow F_1(x)=\dfrac1{1-x}
\]
进而:
\[F(x)=\sum_{n\ge0}(n+1)x^n\\
F(x)x+F_1(x)=F(x)\Rightarrow F(x)=\dfrac{\frac{1}{1-x}}{1-x}=\dfrac1{(1-x)^2}
\]
-
法二 (求导
\[
\]
-
二项式定理
-
\(\large\color{red}\star\) 高维前缀和(咕
-
我们先假定 第 4 个 成立,她的生成函数有个等价形式:
\[\sum_{k=0}^{+\infty}{n+k-1\choose n-1}x^k
\]
又发现,第 5 个 的数列在 \(k<n\) 的时候,其值均为 \(0\)。于是相当于将 \(n-1\) 换做 \(n\),再将生成函数右平移 \(n\)(即封闭形式 \(\times x^n\)。
-
\(\large\color{red}\star\) 牛顿二项式定理(咕
-
后面三个相等本质上都是因为她们泰勒展开相等。
2.2 生成函数的运算
- 系数后移:直接乘 \(x^k\)。
- 系数前移:减去前 \(k\) 项,然后除以 \(x^k\)。
- 系数乘 \(i\):先求导然后整体后移 \(1\)。
- 两个生成函数以卷积形式相乘,就等价于她们的封闭形式相乘。
例题
https://www.luogu.com.cn/article/lh5ys4hl
Step1 化简递推式
\[\begin{aligned}
Ans[0]&=1\\
Ans[i]&=\sum_{j=0}^nAns[i-j]\times f[j]
\end{aligned}
\]
这里的 \(Ans[0]=1\) 不是题目定义来的,而是为了服务于 \(Ans\) 的递推。
Step2 求通项公式
令 \(F\) 为 \(Ans\) 的生成函数。
\[\begin{aligned}
G(x)&=1+\sum_{i=1}^xAns[i]x^i
\end{aligned}
\]
将 \(Ans\) 的递推式代入,有:
\[G(x)=1+\sum_{i=1}^x\left(\sum_{j=0}^iAns[i-j]\times f[j]\right)x^i
\]
发现后面一坨都是卷积,然后:
\[\begin{aligned}
G(x)&=1+G(x)\cdot F(x)\\
&=\dfrac 1{1-F(x)}=\dfrac{1-x−x^2}{1-2x+x^2}=1-\dfrac x{x^2+2x-1}\\
\end{aligned}
\]
下考虑如何展开 \(\dfrac x{x^2+2x-1}\)。
设 \(x_1,x_2\) 为方程 \(x^2+2x-1\) 的两根,不难得到 \(x_{1,2}=-1\pm \sqrt2\)。
则有:
\[\begin{aligned}
\frac x{x^2+2x-1}&=\frac x{x_1-x_2}\left(\frac 1{x-x_1}-\frac1{x-x_2}\right)\\
&=\color{lightgray}{\dfrac1{x_1-x_2}\left(\dfrac 1{1-x_1/x}-\dfrac1{1-x_2/x}\right)}&\text{【我们要的 } x\text{ 应该在分子上】}\\
&=\frac x{x_1-x_2}\left(\frac1{x_2}\frac1{1-x/{x_2}}-\frac1{x_1}\frac1{1-x/{x_1}}\right)\\
&=\frac x{x_1-x_2}\left(\frac1{x_2}\sum_{i=0}^{+\infty}\left(\frac{x}{x_2}\right)^i-\frac1{x_1}\sum_{i=0}^{+\infty}\left(\frac{x}{x_1}\right)^i\right)\\
&=\frac 1{x_1-x_2}\left(\sum_{i=0}^{+\infty}\left(\frac{x}{x_2}\right)^{i+1}-\sum_{i=0}^{+\infty}\left(\frac{x}{x_1}\right)^{i+1}\right)\\
\end{aligned}
\]
一开始那个 \(1\) 是常数项,跟 \(n\) 项系数无关。故而:
\[[x^n]G(x)=-\left([x^n]\right)
\]