生成函数学习笔记

对于序列 \(a_0,a_1,\cdots\),构造函数 \(F(x)=a_0+a_1x+a_2x^2+\cdots\),称 \(F(x)\) 为序列 \(a_0,a_1,\cdots\) 的生成函数,也称母函数。

\(a\) 可以是有穷序列,也可以是无穷序列。

生成函数可以是一个无穷级数。我们一般设 \(-1<x<1\),在这个范围内,无穷级数收敛,可以在 \(x\to \infty\) 时得到该无穷级数的值。

(级数:将数列的项依次用加号连接起来的函数)

生成函数是一种幂级数,其中每项系数反映了这个序列的信息。

生成函数将方案数的序列映射成一个多项式的系数,将计数问题转化为多项式问题。

例 1

有三个砝码,分别为 \(1,2,3\) 克,问能够称出多少种不同的重量。

定义 \(a_i\) 表示称出 \(i\) 克的方案数。

  1. 考虑只有 \(1\) 克砝码的情况,组成 \(0\) 克有 \(1\) 种情况,\(a_0=1\),组成 \(1\) 克有一种情况,对应生成函数 \(f_1(x)=a_0+a_1x=1+x\)
  2. 考虑只有 \(2\) 克砝码的情况,\(a_0=1,a_1=0,a_2=1\),所以对应生成函数 \(f_2(x)=1+x^2\)
  3. 考虑只有 \(3\) 克砝码的情况,\(f_3(x)=1+x^3\)

根据乘法原理,将三个生成函数相乘。

\(f_1(x)f_2(x)f_3(x)=(1+x)(1+x^2)(1+x^3)=1+x+x^2+2x^3+x^4+x^5+x^6\)

其中 \(x^i\) 的系数代表称出 \(i\) 克的方案数。

例 2

现在有 \(n\) 种不同的苹果,每种苹果都有无限个,问选出 \(k\) 个苹果的方案数是多少。

组合数学解法

\(x_i\) 表示选第 \(i\) 种苹果的数量,那么需要满足 \(x_1+x_2+\cdots+x_n=k\)\(x_i\ge 0\)

问题转化为这个方程的非负整数解的数量,根据插板法,显然 \(\binom{n-1}{k+n-1}\)

生成函数解法

定义 \(a_i\) 表示选出 \(a_i\) 个苹果的方案数。

对于第 \(i\) 种苹果,对应的生成函数为 \(f_i(x)=1+x+x^2+\cdots=\lim\limits_{n\to \infty}\frac{1-x^n}{1-x}\)

\(f_i(x)=\frac{1}{1-x}\),后面会推。

根据乘法原理,最终的生成函数为:\(f(x)=f_1(x)f_2(x)\cdots f_n(x)=\frac{1}{(1-x)^n}=\sum\limits_{k=0}^{\infty}\binom{k}{n+k-1}x^k\),答案为 \(x^k\) 的系数,即 \(\binom{k}{n+k-1}\)

生成函数的解法

  1. 将原问题分解成若干个子问题。
  2. 求每个子问题的生成函数。
  3. 所有子问题生成函数相乘,系数加起来就是总方案数。

普通生成函数

序列 \(a\) 的普通生成函数定义为形式幂级数:

\[F(x)=\sum\limits_{n} a_nx^n \]

序列 \(a\) 既可以是有穷序列,也可以是无穷序列。

封闭形式

展开形式:\(1+x+x^2+\cdots\)

封闭形式:\(\frac{1}{1-x}\)

通常在计算过程中,会适时将展开形式转换为封闭形式。

一般转化方式

有限序列 \(a\) 显然是容易的,这里讨论无限序列 \(a\) 的生成函数的转化方式。

e.g. \(F(x)=1+x+x^2+\cdots\),则 \(F(x)x+1=F(x)\),解方程得 \(F(x)=\frac{1}{1-x}\)

常见形式幂级数

  1. \(\frac{1}{1-x}=\sum\limits_{i=0}^{\infty}x^i=1+x+x^2+\cdots\)
  2. \(\frac{x}{1-x}=\sum\limits_{i=0}^{\infty}x^{i+1}=x+x^2+x^3+\cdots\)
  3. \(\frac{1}{(1-x)^2}=\sum\limits_{i=0}^{\infty}(i+1)x^i=1+2x+3x^2\)
  4. \(\frac{1}{(1-x)^n}=\sum\limits_{k=0}^{\infty}\binom{k}{n+k-1}x^k\)

指数级生成函数

普通型生成函数可以用于求组合方案数。

指数级生成函数可以用于求排列数。

序列 \(a\) 的指数生成函数定义为形式幂级数:

\[F(x)=\sum\limits_{n}a_n\frac{x^n}{n!}=a_0+a_1\frac{x}{1!}+a_2\frac{x^2}{2!}+\cdots+a_n\frac{x^n}{n!}+\cdots \]

\(a_i\) 表示选 \(i\) 个的派列数。

现在有序列 \(a\) 和序列 \(b\) 的指数生成函数:\(F(x)=\sum\limits_{n}a_n\frac{x^n}{n!}\)\(G(x)=\sum\limits_{n}b_n\frac{x^n}{n!}\)

那么:

常见指数型生成函数转化

泰勒展开:

\[e^x=\sum\limits_{i=0}^{\infty}\frac{x^i}{i!}=1+\frac{1}{1!}x^1+\frac{1}{2!}x^2+\cdots+\frac{1}{n!}x^n+\cdots \]

扩展:

posted @ 2025-03-06 14:55  _E_M_T  阅读(67)  评论(0)    收藏  举报