\[F(x) = \sum_{n}a_nk_n(x) \]生成函数(generating function),又称母函数,是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。
生成函数有许多不同的种类,但大多可以表示为单一的形式:
其中 \(k_n(x)\) 被称为核函数,不同的核函数会导出不同的生成函数,分成3类
普通生成函数:\(k_n(x)=x^n\) (OGF)
指数生成函数:\(k_n(x)=\dfrac {x^n} {n!}\) (EGF)
狄利克雷生成函数:\(k_n(x)=\dfrac {1} {n^x}\) (DGF)
另外,对于生成函数 \(F(x)\),我们用 \([k_n(x)]F(x)\) 来表示它的第 \(n\) 项的核函数对应的系数,也就是 \(a_n\)
容易发现其中的 \(x\) 对于原式中的结果并没有什么影响,我们想要的应该是固定项前面的系数
\(a\) 既可以是有穷序列,也可以是无穷序列
若干例子:
序列 \(a=\langle 1,2,3\rangle\) 的OGF:\(1+2x+3x^2\)
序列 \(a=\langle 1,1,1,\dots,1\rangle\) 的OGF:\(\displaystyle\sum_{n} x^n\)
序列 \(a=\langle 1,2,4,8,16,\dots\rangle\) 的OGF:\(\displaystyle \sum_n 2^nx^n\)
序列 \(a=\langle 1,3,5,7,9,\dots\rangle\) 的OGF:\(\displaystyle \sum_n (2n+1)x^n\)
考虑两个序列 \(a,b\) 的普通生成函数,分别为 \(F(x),G(x)\),那么有
\[F(x)\pm G(x)=\sum_n (a_n\pm b_n)x^n \]因此 \(F(x)\pm G(x)\) 是序列 \(\\langle a_n\pm b_n \rangle\)
考虑乘法运算,也就是卷积:
\[F(x)G(x)=\sum_n x^n \sum_{i=0}^n a_ib_{n-i} \]这是OGF比较好玩的一个东西,就是说每次写成一个多项式真的很难受,但是如果能够把这个形式幂级数写成其它的形式可能就会好很多
对于上述例二,容易发现:
\[xF(x)+1=F(x) \]很容易想到移项后可以得到:\(F(x)=\dfrac {1}{1-x}\)
可能会有点疑惑,这个东西怎么还能是负数?
实际上发现,如果要让前面的形式幂级数在 \(\infty\) 处收敛,x的范围应在 \(\in (-1,1)\)
但是还是不需要去理它,因为我们生成函数的本质不在于这个 \(x\) 的取值,或者说对于这个封闭形式,只是一种方便推过去和推回来的过程罢了,并不是对原式的具体阐述
有若干种物品 ,每种物品只有1件,求取 \(n\) 件物品的总方案数。
每种物品的生成函数是 \(1\times x^0+1\times x^1\)
那么若干个物品乘起来就是 \((x+1)^n\)
然后用二项式定理展开一下就可以得到:
\(\displaystyle (x+1)^n=\sum_{i=0}^n \binom {n} {i}x^i\)
如果学过组合数学就会发现这个确实很对
当然也有比较恶心的
有若干种物品 ,每种物品可以取任意件,求取 \(n\) 件物品的总方案数
和上个题一样,每个物品的生成函数是:\(\displaystyle\sum_{i=0}^n x^i\) 很快就能发现,又等于 \(\dfrac 1 {1-x}\)
这样的话 \(m\) 件物品的生成函数就是
\[\begin{aligned} \dfrac {1} {(1-x)^m}=&(1-x)^m\\ =&\sum_{i=0}^{\infty} \dfrac {-m \times (-m-1) \dots (-m-i+1)} {i!}(-x)^i\\ =&\sum_{i=0}^{\infty} \dfrac {(-1)^i \times m \times (m+1)\dots (m+i-1)} {i!}(-1)^ix^i\\ =&\sum_{i=0}^{\infty} \dfrac {(m+i-1)!} {i!(m-1)!}x^i\\ =&\sum_{i=0}^{\infty} \binom {m + i - 1} {m - 1}x^i \end{aligned} \]同时可以用隔板法理解,答案是相同的
来个重头戏:斐波那契数列:
前置知识:
\(\displaystyle\dfrac {1} {1-kx}=\sum_{i=0}k^ix^i\)
设 \(F(x)\) 表示斐波那契数列的生成函数
首先第一步拆分,容易得到:
\[\begin{aligned} A =& 1+1x+2 x^2 + 3x^3+5x^4+8x^5\\ xA =& ~~~~~~~~~ x+ 1x^2+2x^3+3x^4+5x^5\\ x^2A=&~~~~~~~~~~~~~~~~1x^2+1x^3+2x^4+3x^5 \end{aligned} \]容易发现下面两个相加就只和第一个差出来一个数1
\(A-xA-x^2A=1\)
整理一下:\(A=\dfrac {1}{1-x-x^2}\)
然后发现这和上面补充的前置知识太相似了,如果能做到和前面的那个完全一样就好了
然后就是很多套路性的转化了
第一个因式分解,\(1-x-x^2=(1-ix)(1-jx)\)
解得 \(i=\dfrac {1+\sqrt 5} {2}~~j =\dfrac {1-\sqrt 5} {2}\)
但是这时候还是两个 \(\dfrac {1} {1-kx}\) 的卷积,容易发现既然根式都出来了,上面的1也顺路拆了算了
令 \(ai+bj=1\),得到 \(a=\dfrac {1} {{\sqrt 5}}i~~b=-\dfrac {1} {\sqrt 5}j\)
带回原来的式子里,裂项以后拆成一个巨无霸式子:
\(A=\dfrac {i} {\sqrt 5}\dfrac {1}{1-ix}-\dfrac{j}{\sqrt 5}\dfrac{1}{1-jx}\)
写的更加简便一点:
\(\displaystyle A = \dfrac {M} {1-ax}+\dfrac {N} {1-bx}=\sum_{k=0}(Ma^k + Nb^k)x^k\)
同时 \(M=\dfrac {\sqrt 5 i} {5},N=-\dfrac {\sqrt 5 j} {5},a=i,b=j\)
然后就是前面的基本多项式运算了
\(\displaystyle F(x)=\sum_{k=0}((\dfrac {\sqrt 5 i} {5}) \times (\dfrac {1+\sqrt 5} 2)^k-\dfrac {\sqrt 5 j} {5}\times (\dfrac {1-\sqrt 5} {2})^k)x^k\)
经过一点点化简就能得到:
\[ \frac{x}{1-x-x^2}=\sum_{n\ge 0}x^n \frac{1}{\sqrt{5}}\left( \left(\frac{1+\sqrt{5}}{2}\right)^n-\left(\frac{1-\sqrt{5}}{2}\right)^n \right) \]到这里其实要说的也就差不多了