生成函数(母函数)

生成函数(母函数)

定义

生成函数(Generating Function)又称母函数,是处理组合数学问题的一大利器。
它是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。
生成函数有许多不同的种类,但大多可以表示为单一的形式:$$F(x)=\sum_{n}a_nk_n(x)$$
其中 \(k_n(x)\) 被称为核函数。不同的核函数会导出不同的生成函数,拥有不同的性质:

  • 普通生成函数:\(k_n(x)=x^n\);
  • 指数生成函数:\(k_n(x)=\frac{x_n}{n!}\)
  • 狄利克雷生成函数:\(k_n(x)=\frac{1}{n^x}\)

同形式幂级数,我们常用 \([k_n(x)]F(x)\) 来表示它的第 \(n\) 项的核函数对应的系数,也就是 \(a_n\).

一些可能会用到得公式

  • \((1+x)^n=C_{n}^{0} +C_{n}^{1}x+\cdots +C_{n}^{r}x^r+\cdots + C_{n}^{n}x^n\).
  • \(\frac{1}{1-x}=1+x+x^2+\cdots+x^k+\cdots\)
  • \((1-x)^{-n}=\sum_{k=0}^{\infty}C_{n+k-1}^{k}x^k\)
  • \((a+b)^n=\sum_{i=0}^{n}C_{n}^{i}a^ib^{n-i}\)

普通生成函数

普通型母函数的特色是标志函数 \(f_k(x)=x^k\)
常用来解决无标号有序的计数问题。

一、定义

对于序列 \(a_0,a_1,a_2+\cdots\) 的普通生成函数为形式幂级数 \(F(x)=\sum_{i\ge0}f_ix^i\),
若已知序列 \(a_0,a_1,a_2+\cdots\)

三、示例

例1

有1克、2克、3克、4克的砝码各一枚,能称出哪几种重量?每种重量各有几种可能方案?

\(1\)\(1\)克砝码可以看成\(1+x^1\)\(1\)表示不取,\(x1\)表示取一个,以下同理。
\(1\)\(2\)克砝码可以看成\(1+x^2\)
\(1\)\(3\)克砝码可以看成\(1+x^3\)
\(1\)\(4\)克砝码可以看成\(1+x^4\)
构造母函数 \(G(x)=(1+x)(1+x^2)(1+x^3)(1+x^4)\) \(=1+x+x^2+2x^3+2x^4+2x^5+2x^6+2x^7+x^8+x^9+x^{10}\)
在这个函数中,若指数表示可称出重量,系数表示方案数,则可以看出重量为\(3\)克、\(4\)克、\(5\)克、\(6\)克、\(7\)克的方案数均有两种,而重量为\(1\)克、\(2\)克、\(8\)克、\(9\)克、\(10\)克的方案只有\(1\)种。

例2

食物

在许多不同种类的食物中选出 \(n\) 个,每种食物的限制如下:
承德汉堡:偶数个
可乐:\(0\) 个或 \(1\)
鸡腿:\(0\) 个,\(1\) 个或 \(2\)
蜜桃多:奇数个
鸡块:\(4\) 的倍数个
包子:\(0\) 个,\(1\) 个,\(2\) 个或 \(3\)
土豆片炒肉:不超过一个
面包:\(3\) 的倍数个
每种食物都是以「个」为单位,只要总数加起来是 \(n\) 就算一种方案。对于给出的 \(n\) 你需要计算出方案数,对 \(10007\) 取模。

对于每种食物的生成函数:

  • 承德汉堡:\(1+x^2+x^4+\cdots=\frac{1}{1-x^2}\)
  • 可乐:\(1+x\)
  • 鸡腿:\(1+x+x^2=\frac{1-x^3}{1-x}\)
  • 蜜桃多:\(x+x^3+x^5+\cdots=x(1+x^2+x^4+\cdots)=\frac{x}{1-x^2}\)
  • 鸡块:\(1+x^4+x^8+\cdots=\frac{1}{1-x^4}\)
  • 包子:\(1+x+x^2+x^3=\frac{1-x^4}{1-x}\)
  • 土豆片炒肉:\(1+x\)
  • 面包:\(1+x^3+x^6+\cdots=\frac{1}{1-x^3}\)

全部乘起来得到 \(\frac{x}{(1-x)^4}\)

\[x(\sum_{n=0}^{\infty}C_{n+4-1}^{n}×x^n) \]

\[=\sum_{n=0}^{\infty}C_{n+3}^{n}×x^{n+1} \]

\[=\sum_{n=1}^{\infty}C_{n+2}^{n-1}x^n \]

\[=\sum_{n=1}^{\infty}C_{n+2}^{3}x^n \]

所以答案为 \(C_{n+2}^{3}=\frac{(n+2)×(n+1)×n}{6}\)

例3

求斐波那契数列通项,已知 \(f_n= \left\{\begin{matrix} 1 & n\le 1\\ f_{n-1}+f_{n-2} & n > 1 \end{matrix}\right.\)

对于其母函数T有:

\[F(x)=\sum_{i\ge0}f_ix^i \]

\[=f_0+f_1x+\sum_{i\ge2}f_ix^i \]

\[=x+\sum_{i\ge2}(f_{i-2}+f_{i-1})x^i \]

\[=x+x^2+\sum_{i\ge2}f_{i-2}x^{i-2}+x\sum_{i\ge2}f_{i-1}x^{i-1} \]

\[=x+x^2F(x)+xF(x) \]

解得 $$F(x) = \frac{x}{1-x-x^2}$$
\(\frac{x}{1-x-x^2}\) 化开得

\[F(x)=\frac{x}{(1-\frac{1-\sqrt{5}}{2}x)(1-\frac{1+\sqrt{5}}{2}x)} \]

\[=\frac{1}{\sqrt{5}}\frac{1}{1-\frac{1+\sqrt{5}}{2}x}-\frac{1}{\sqrt{5}}\frac{1}{1-\frac{1-\sqrt{5}}{2}x} \]

所以 $$f_n=\frac{1}{\sqrt{5}}(\frac{1+\sqrt{5}}{2})^n - \frac{1}{\sqrt{5}}(\frac{1-\sqrt{5}}{2})^n$$

指数生成函数

常用来解决有标号有序的计数问题
未完······

posted @ 2022-08-31 16:14  kroyosh  阅读(185)  评论(0)    收藏  举报