Note -「Generating Functions」

cirnovsky /

OGF\mathbf{OGF} 的定义

对于一个序列 a1,a2,a_{1},a_{2},\cdots,我们称:

G(x)=i=0aixiG(x)=\sum_{i=0}^{\infty}a_{i}x^{i}

为序列 aaOGF\mathbf{OGF} 即普通生成函数 (Ordinary Generating Function\texttt{Ordinary Generating Function})。

同时因为我们不关心 xx 的取值,因此 i=1+aixi\sum_{i=1}^{+\infty}a_{i}x^{i} 又称作以 xx 为自由元的形式幂级数。 -- 摘自 自为风月马前卒

§ 一个例子

举个例子,序列:

(0n),(1n),,(nn)\left(^{n}_{0}\right),\left(^{n}_{1}\right),\cdots,\left(^{n}_{n}\right)

OGF\mathbf{OGF} 为(二项式定理):

G(x)=(1+x)nG(x)=(1+x)^{n}

由等比数列求和公式,有一个常用的等式:

i=0xi=1x1x\sum_{i=0}^{\infty}x^{i}=\frac{1-x^{\infty}}{1-x}

因为指数为 \infty,所以 xx^{\infty} 趋近于 00,箭头方向随便打,因为我们并不关心 xx 的取值。

i=0xi=11x\sum_{i=0}^{\infty}x^{i}=\frac{1}{1-x}

这个等式还有一个重要的运用,我们把 xx 替换成 kxkx 即可得:

i=0(kx)i=11kx\sum_{i=0}^{\infty}(kx)^{i}=\frac{1}{1-kx}

后文的用 OGF\mathbf{OGF} 求序列的通项公式里面这个东西很有用的。

Fibonacci\texttt{Fibonacci} 序列的生成函数求法

定义一个序列

Fi={1,i[0,1]Fi1+Fi2,i[2,)F_{i}=\begin{cases} 1,i\in[0,1] \\ \displaystyle F_{i-1}+F_{i-2},i\in[2,\infty) \end{cases}

则我们称 FFFibonacci\texttt{Fibonacci} 序列。

接下来我们来推导其生成函数:

G(x)=i=0FixiG(x)=1+x+2x2+3x3+xG(x)=x+x2+2x3+3x4+x2G(x)=x2+x3+2x4+3x5+\begin{aligned} G(x)&=\sum_{i=0}^{\infty}F_{i}x^{i} \\ G(x)&=1+x+2x^{2}+3x^{3}+\cdots \\ xG(x)&=x+x^{2}+2x^{3}+3x^{4}+\cdots \\ x^{2}G(x)&=x^{2}+x^{3}+2x^{4}+3x^{5}+\cdots \end{aligned}

这里运用初中数学中经常用的到错位相减这一小技巧,可得

G(x)xG(x)x2G(x)=1G(x)-xG(x)-x^{2}G(x)=1

即可得

G(x)=11xx2G(x)=\frac{1}{1-x-x^{2}}

至此,我们已经求出了 Fibonacci\texttt{Fibonacci} 序列的 OGF\mathbf{OGF} 了。

§ 利用生成函数求数列通项

以前文提到的 Fibonacci\texttt{Fibonacci} 为例。

首先我们知道其 OGF\mathbf{OGF} 为:

G(x)=11xx2G(x)=\frac{1}{1-x-x^{2}}

待定系数一下分母我们就可以得到:

G(x)=1(11+52x)(1152x)G(x)=\frac{1}{(1-\frac{1+\sqrt{5}}{2}x)(1-\frac{1-\sqrt{5}}{2}x)}

后面的还没推出来,咕了