生成函数 学习笔记

定义:数列 \(F\) 的 生成函数为 \(F(x)=\sum_{i=0} F[i] x^i\),其中的 \(x\) 并没有实际意义

几何级数定理

\[\sum_{i=0} x^i= {1 \over 1-x} \]

证明考虑等比数列求和,由于 \(x\) 并无实际意义,则无需考虑收敛性
推广可以得到

\[\sum_{i=0} a^ix^{ik}= {1 \over 1-ax^k} \]

用这个技巧可以将一类的生成函数进行化简

广义二项式定理

首先定义广义二项式系数 \({ n \choose k }={ n^{\underline k} \over k!}\),其中 \(n\) 的范围为全体实数,则

\[(x+y)^n=\sum_{i=0}^{\infty} { n \choose k } x^i y^{k-i} \]

一个衍生技巧,上指标反转(处理上指标为负整数)

\[{ r \choose k }=(-1)^k {k-r-1 \choose k} \]

证明考虑 \(r^{\underline k}=r(r-1)…(r-k+1)=(-1)^k(-r)(-r+1)…(-r+k-1)=(k-r-1)^{\underline k}\)

通过这些内容可以得出以下的转换

\[\sum_{i=0}{(-1)^i {n \choose i}}=(1-x)^n \]

\[\sum_{i=0}{n+i \choose i}={1 \over {(1-x)^{n+1}}} \]

例题


关于处理 \(2n \choose n\) 形的组合数
考虑

\[x^{\underline k}(x-{1\over 2})^{\underline k}=x(x-{1\over 2})(x-1)…(x-k+1)(x-k+{1\over 2}) \]

\[=2^{-2k}[2x(2x-1)(2x-2)…(2x-2k+2)(2x-2k+1)]={2x^{\underline {2k}} \over {2^{2k}}} \]

通过 \(1 \over 2\) 使得两个下降幂交错,再扩大回下降幂
\(x=k=n\),则

\[{{2n^{\underline {2n}}}\over{2^{2n}}}={n^{\underline n}(n-{1 \over n})^{\underline n}} \]

两边同除以 \((n!)^2\) 得到

\[2^{-2n}{2n \choose n}={n-{1 \over 2} \choose n} \]

上标反转一下

\[{2n \choose n}=(-4)^n{ -{1 \over 2} \choose n} \]

接下来可以尝试用上面的结论得出 \(\sum_{i=0} {2i \choose i}x^i\)

\[f(x)=\sum_{i=0} (-4x)^i{ -{1 \over 2} \choose i} \]

逆用二项式定理,得到 \(f(x)=(1-4x)^{-{1 \over 2}}\)

生成函数与组合计数

定义

组合对象:满足某一性质的可数对象,定义组合对象的集合为 \(\mathcal{A}\)
为了方便描述,下文不再区分 \(\mathcal{A}\)\(A\)
所有的 \(a \in A\) 定义一个大小 \(|a|\),记所有大小为 \(n\) 的对象组成的元素叫 \(A_n\),定义计数序列 \(A[n]=|\mathcal{A}_n|\)

笛卡尔积
定义 \(\{(a_1,a_2,…,a_n)|a_1\in A_1,a_2\in A_2,…,a_n\in A_n\}\)\(A_1,A_2,…,A_n\) 的笛卡尔积,记为 \(A_1\times A_2\times …\times A_n\)
就是从每个集合中选一个元素组成的新元素,满足 \(|A\times B|=|A|\times|B|\)
对于组合对象组合,定义 \(|a+b|=|a|+|b|\)

OGF

设数列 \(F[n]\),则 OGF\(F(x)=\sum_{i=0} F[i]x^i\)
两个 OGF 的卷积是加法卷积:\((F*G)[k]=\sum_{i+j=k}F[i]G[j]\)
几何级数和二项式定理中就提到几个经典 OGF,以下还有

\[\sum_{i=0} {x^i \over i}=\ln {1 \over 1-x}=-\ln(1-x) \]

\[\sum_{i=0} {x^i \over i!}=e^x \]

其中 \(0^{-1}=0,0!=1\)

对于 OGF,乘法代表笛卡儿积,加法代表不交几何的并

例题UVA12298
考虑对于每个花色建立数列 \(F[i]\) 表示点数为 \(i\) 的数量
然后将四个花色的生成函数进行卷积,提取一下系数就好了

EGF

设数列 \(F[n]\)EGF\(F(x)=\sum_{i=0} F[i] {x^i \over i!}\)
\(F[n]={1,1,1…}\) 时,EGF\(e^x\)
两个 EGF 的卷积为二项加法卷积,即

\[(F*G)[k]=\sum_{i+j=k} {k \choose i}F[i]G[j] \]

证明如下,先将 阶乘写出来

\[{(F*G)[k] \over k!}=\sum_{i+j=k} {F[i]\over i!}{G[j]\over j!} \]

合并阶乘得到

\[=\sum_{i+j=k} {k! \over i!j!} F[i]G[j] \]

系数 \(k! \over i!j!\)\(k \choose i\)
下面是一些常见的 EGF

\[\sum_{i=0} {x^i \over i!}=e^x \]

\[\sum_{i=0} {c^ix^i \over i!}=e^{cx} \]

考虑上式 \(c=1/-1\) 相加除以二

\[\sum_{i=0} {[2|i]x^i \over i!}={e^x+e^{-x} \over 2} \]

考虑组合数的定义(定义\(x^{\underline 0}=1\))

\[\sum_{i=0} {a^{\underline i}x^i \over i!}=(1+x)^a \]

OGF 类似,EGF 的加法含义依旧是不相交方案的并,但是乘法为有标号对象的笛卡尔积
即将两个对象拼接的时候,保持两个对象相对顺序不变,一共有 \(|a|+|b| \choose |a|\) 种方案

例题P5219
考虑prufer序列,即序列中出现次数最多的点恰好为 \(m\)
将"恰好"的限制改为至少,之后差分一下
定义 \(F[i]\) 表示单个元素出现次数为 \(i\) 的方案数,易知 \(F(i)=\sum_{i=1}^m {x^i \over i!}\)
那么卷积一下,答案为 \([x^{n-2}]F(x)^n\)

此外,\(\exp\) 有优美的组合意义
观察 \(\exp F(x)=\sum_{i=0} {F(x)^i \over i!}\)
若吧 \(F(x)\) 视为“单个元素”的 EGF,那么 \(\exp F(x)\) 就描述了这些元素组成的有标号集合
原式的意义就是枚举集合元素个数,用卷积拼接,再除以阶乘去重

例题P4841
考虑一个一般图的组成元素是多个连通图
设一般图的生成函数为 \(F(x)\),连通图的生成函数为 \(G(x)\),则 \(\exp G(x)=F(x)\)
化简得到 \(G(x)=\ln F(x)\)\(F(x)\) 是简单的

PGF

这一类生成函数用于概率期望
定义 \(P(A)\) 表示 \(A\) 事件发生的概率
定义离散随机变量 \(x \in \mathbb{N}\)
它的生成函数为 \(F(x)=\sum_{i=0} P(x=i)x^i\),则 \(F(1)=1\)
考虑\(F'(1)=\sum_{i=0} iP(X=i)1^i\),为 \(E(x)\)
推广有 \(E(x^{\underline k})=F^{(k)}(1)\)

同时我们知道 \(Var(X)=E(x)^2-E(x^2)\)
那么 \(Var(X)=E(x)^2-E(x(x-1))-E(x)=F'(1)^2-F''(1)-F'(1)\)

例题P4548
考虑定义 \(F[n]\) 为第 \(n\) 次恰好结束的概率,\(G[n]\) 为第 \(n\) 次还没结束的概率
答案即为 \(F'(1)\),推知 \(F(x),G(x)\) 的关系
\(F(x)+G(x)=xG(x)+1\)
提取 \(x^n\) 的系数,左侧为恰好在 \(n\) 结束与 \(n\) 后结束的概率和,右侧为 \(G(x)\) 向后推一位,即 \(n-1\) 还没结束的概率
定义字符集为 \(c\),那么出现一个要求字符的概率为 \(1 \over c^m\)
那么保证结束的概率为 \(G(x)*({x \over c})^m\) 但这样可能会多算
考虑如何把 \(F(x)\) 补成上式,一定是在 Border 处结束,令 \(A[i]\) 表示是否有长度为 \(i\) 的 Border,得到恒等式

\[G(x)*({x \over c})^m=\sum_{i=1}^m A[i]F(x)({x \over c})^{m-i} \]

\(F(x)+G(x)=xG(x)+1\) 两边求导得 \(F'(x)+G'(x)=xG'(x)+G(x)\),令 \(x=1\),得到 \(F'(1)=G(1)\),答案变为 \(G(1)\)

\[G(1)*{1 \over c^m}=\sum_{i=1}^m A[i]F(1){1 \over c^{m-i}} \]

化简得到 \(G(1)=\sum_{i=1}^m A[i]c^i\)

posted @ 2022-12-27 16:09  Matutino_Lux  阅读(54)  评论(0编辑  收藏  举报