生成函数最基本的知识
生成函数
是什么?
生成函数是针对某一个序列而言的,其某一项的系数代表这个序列上该位的值。(这里就暂时这样说吧,虽然这可能只在普通生成函数上是对的,但较容易理解)
更不通俗易懂的来说,
生成函数是一种形式幂级数,
形如:\(G(x)=a_0+a_1x+a_2x^2+a_3x^3+......\)
说生成函数叫做形式幂级数,就是因为这里的 \(x\) 没有任何实际含义,只是一个形式。
有什么用?(以普通生成函数为例)
既然 \(x\) 只是一个形式,那么生成函数有什么用呢?
假设我们有两个序列 \(a,b\) 的生成函数:
考虑执行相加,那么显然:
\(G(x)=(a_0+b_0)+(a_1+b_1)x+(a_2+b_2)x^2+(a_3+b_3)x^3+....\)
考虑执行相乘(也叫卷积),那么 \(x^i\) 的系数是:
\(\sum_{j=0}^{i}a_jb_{i-j}\)
那么这样又有什么用呢?
设 \(a_j\) 表示在序列 \(a\) 所代表的物品中选 \(j\) 个的方案数(这个例子中当然只能是1或0),\(b_j\) 同理
那么考虑乘起来后的生成函数,它 \(x^i\) 所对应的系数就代表着在 \(a\) 中选若干个,\(b\) 中选若干个,总共选 \(i\) 个的方案数。
例一:
有 \(n\) 个物品,每种物品有 \(v_i\) 个,求恰好选了 \(k\) 个的方案数。
构造 \(n\) 个生成函数( \(x^{v_i}\) 之前的系数为1,后面是0),然后直接乘起来,最后得到的生成函数 \(x^k\) 的系数就是答案。
例二:
有质量为1,2,3,4的砝码各有无限枚,求称出 \(n\) 的方案数。
生成函数只需要保留指数 \(\le n\) 的项,后面不用管,然后就和例一几乎一样了。
具体来说:
对于质量为1的砝码:
\(G(x)= 1+x+x^2+x^3+......\)
对于质量为2的砝码:
\(G(x)= 1+x^2+x^4+x^6+......\)
.......
但这个例子重点是为了引出下面的内容:
普通生成函数的封闭形式:
前置知识:等比数列求和公式:
封闭形式一:
对于一个有限序列 \(a={1,1,1,1,1...1}\) ,共有 \(n+1\) 项 ,生成函数为 \(G(x)=\sum_{i=0}^{n}x^i\)
这是一个等比数列,所以有求和公式:
考虑当 \(n\) 取无穷的时候,该式变为了:
假设该式收敛(数学上完全不严谨,但容易直观理解),那么收敛结果为:
封闭形式二:
当序列为 \({1,p,p^2,p^3,.....}\) ,此时 \(G(x)=\sum_{i=0}^{∞}p^ix^i\)
那么把 \(px\) 作为一个整体就和封闭形式一完全一样了:
封闭形式:
封闭形式三:(可扩展)
当序列是 \({0,1,1,1,1....}\) ,由于少了一项,那么封闭形式就是封闭形式一减一,即:
封闭形式四:(可扩展)
当序列是 \({1,0,1,0,1,......}\), 总长 \(2n+2\)
那么相当于有 \(n+1\) 项是1
这部分是 \(\sum_{i=0}^{n}x^{2i}\)
仍然是等比数列,直接算就好了:
即:
封闭形式五:
当序列是 \(1,2,3,4,5,.....\) 时,这整体上实际上是一个差比序列。
先乘一个数再错位相减就行了,这样就变成了一个普通等比数列,直接求。
封闭形式六:(重要)
当序列的第 \(i\) 项 \(a_i\) 是 \(\binom{n}{i}\) ,即:\(G(x)=\sum_{i=0}^{n}\binom{n}{i}x^i\)
这个序列是有穷的,因为当 \(i>n\) 时,系数为0
所以根据二项式定理 \(G(x)=\sum_{i=0}^{n}\binom{n}{i}1^{n-i}x^i=(1+x)^n\)
封闭形式七:(重要)
当无穷序列的第 \(i\) 项 \(a_i\) 是 \(\binom{n+i}{i}\) 时,
数学归纳法证明:
接下来的处理:
将各个封闭形式相乘并化简,然后找到一个对应的式子,使得该式的封闭形式等于化简过后的式子,这样该式子对应位置的系数就是答案。
指数生成函数:
普通生成函数用于解决组合类计数问题。
指数生成函数用于解决排列类计数问题。
已知第 \(i\) 种物品有 \(a_i\) 种,那么选出的排列数为 \(\frac{n!}{a_1!a_2!a_3!...}\)
那么构造生成函数:
显然这样两个指数生成函数无论是相乘还是相加得到的结果都是我们想要的排列数。
这里提供另一个理解方式(仅限于最基础的运用)(自己想的可能不够严谨):
指数生成函数 \(x^i\) 要去除以一个 \(i!\) 的原因是使得 \(a_i\) 相较于普通生成函数乘上一个 \(i!\) 。
这很好理解因为本来排列数就是要比组合数大 \(i!\) 。
指数生成函数的封闭形式:(EGF)
封闭形式一:
对于一个无穷序列 \(a={1,1,1,1,1...}\)
这个需要用到微积分的知识/结论:
封闭形式是:
封闭形式二:
对于一个无穷序列 \(a={1,p,p^2,p^3,p^4...}\)
还是一样,将 \(px\) 替换掉 \(x\) 。
封闭形式三:
对于一个无穷序列 \(a={1,-1,1,-1,1...}\)
就是 \(p\) 为1的情况。
封闭形式四:
对于无穷序列 \(a={1,0,1,0,1,...}\)
发现是形式一 + 形式三然后除以2
若为 \({0,1,0,1,0,...}\)
则是形式一 - 形式三然后除以2
封闭形式分别为:
封闭形式五:
若第 \(i\) 项为 \(A_n^i\) ,那么发现可以消掉然后变回了普通生成函数的封闭形式六:
具体的:
封闭形式为 \((1+x)^n\)
封闭形式六:(一般是反推用?)
若第 \(i\) 项是 \(a_i=(−1)^{i−1}(i−1)!\)
那么生成函数是:
这是什么呢?
是 \(ln(1+x)\)
封闭形式七:(一般反推用?)
若第 \(i\) 项是 \(a_i=(i−1)!\)
那么:
这是 \(-ln(1-x)\)
封闭形式八:
若序列是 \(0,1,0,-1,0,1,0,-1,0,1,0,-1,...\) 的 \(0,1,0,-1\) 循环,
那么封闭形式是 \(sin\,x\)
这个挺好记,把循环类比 \(sin\) 图像
封闭形式九:
有 \(sin\) 就有 \(cos\)
若序列是 \(1,0,-1,0,1,0,-1,0,1,0,-1,0,...\) 的 \(1,0,-1,0\) 循环,
那么封闭形式是 \(cos\,x\)
类比 \(cos\) 图像

浙公网安备 33010602011771号