【组合数学部分笔记】
- 扰动法
考虑将求和式收尾拆出来并对其和的形式找到对应方程。
- 求 \(\sum_{0\leq k<n}kr^k\)
等比数列求和即可。
- 求 \(\sum_{0\leq k<n} k^m\)
单独计算出 \(i=m\) 的值,往下递归即可。
- 求 \(\sum_{0\leq k<n}k^m r^k\)
同样手算出来 \(k=m\) 的部分即可暴力递归。
- 求 \(\sum_{1\leq j<k\leq n}\frac{1}{k-j}\)
换元,用 \(d=k-j,j+d=k\)
二项式系数:
- 求 \(\sum_{0\leq k\leq m}\binom{m}{k}/\binom{n}{k}\)
平行求和得到 \(=\frac{m!(n-m)!}{n!}\binom{n+1}{m}\)
- 求 \(\sum_{k=0}^n k\binom{m-k-1}{m-n-1}\)
继续上指标求和。
- 求 \(\sum_{k\leq n}\binom{n-k}{k}(-1)^k\)
- 求 \(\sum_k \binom{n}{k}\binom{s}{k}k\)
- 求 \(\sum_{k\ge 0}\binom{n+k}{2k}\binom{2k}{k}\frac{(-1)^k}{k+1}\)
生成函数:
常见幂级数:
定义复合:
若 \([z^0]F\not =0,\) 只有 \(G\) 有限才可以定义。
复合逆:定义若 \(G\circ F=x,\) 则 \(G\) 为 \(x\) 的左复合逆。同样定义右逆。
若 \(F\) 常数项是 \(0\) 且 \(1\) 次项为 \(1\) 则可以证明左右逆存在并相等。
求复合逆:拉格朗日反演。只能求单项。
给出两个反演柿子:
证明:待补
多项式除法:考虑做带余除法求出其商式和余式。
其中 \(A,B\) 已知。
带入 \(x=x^{-1},\) 并两边同时乘以 \(x^n\)
两边对 \(x^{n-m+1}\) 取模。由于 \(deg(Q)=n-m\) 所以上述柿子对 \(Q\) 保留信息完整,直接求逆即可。
ODE(常微分方程):
考虑计算一个复合 \(h(F)\) 的情况,可以求导构造方程。
例子:求 \(G(F)=e^{F}\)
考虑 \(G'=e^F\cdot F'=GF'\) 这里的右边就不再是复合而是卷积了。考虑对比系数有
就可以分治 NTT 了。
还有一些应用的例子:如求 \((1+x+x^2)^k\) 求导之后可以线性计算。
还有:求 \(F=\sum_{i=0}^m \frac{x^i}{i!}\) 的 \(F^{0\cdots k}(\bmod x^n)\)
考虑求导 \(F'(x)=F-\frac{x^m}{m!},\) 故而有:
展开柿子就可以递推了。
关于 微分有限 的定义:
若 \(F\) 满足 ODE :
则称其为 微分有限。
若 \(p_i\) 是 \(O(1)\) 次多项式, \(k=O(1),\) 就可以 \(O(\sqrt{n}\log n)\) 计算 \([x^n]F\) 或者 \(O(n)\) 计算前 \(n\) 项。
一些微分有限的函数: \(x^{\alpha},\ln x,e^x,\) 超几何级数。
若 \(f,g\) 微分有限,则其和、卷积都微分有限。
若 \(f\) 微分有限,\(g\) 是代数的 则其复合 \(f\circ g\) 微分有限。
线性递推
生成函数(解析组合)
组合类:定义一个组合类 \(\mathcal{A}\) 是一个有限集或可数集。对每一个元素又有一个大小 \(|\alpha|\) 的定义。其非负且个数有限。
对应生成函数 \(\mathcal{A}(x)=\sum_{\alpha \in \mathcal{A}} x^{|\alpha|}\)
这个地方是加法的形式。这里实际上是对上述所有情况求的并。
乘法(笛卡尔积) 对应于其元素大小相加。用乘法刻画
序列构造 SEQ
对于一个可数集 \(\mathcal{A},\) 其序列构造的生成函数为:
注意:这里是把 整个组合集 的所有组合进行了序列构造。
注意一些理解:
SEQ 对应于 拼接组合对象的 顺序
意为:对于每一个组合对象都表示了一个固定位置的对象拼接。
比如对于 \(d\) 叉树的子树组合,对应乘起来的第 \(i\) 个就是第 \(i\) 棵子树的组合对象。
例子:
- 儿子有顺序的非空多叉树
含义:选择一个根,然后拼儿子
- 儿子有顺序的多叉树
含义:同上,注意其非空的时候拼上的儿子。
儿子不能是空的含义:由于本身 \(T-1\) 的生成函数中就可以选择空了,所以只要拼接就必须拼上非空的儿子
- 括号序列的生成函数
这里和上述非空儿子有顺序多叉树的生成函数一样。
- CF755G
设 \(f_{i,j}\) 为前 \(i\) 个球划分了 \(j\) 组的方案数,对于一个球,我们可以选或不选,选的情况又对应两个一组或者一个一组,设其生成函数为 \(F(x,y)=\sum\sum f_{i,j}x^iy^j,\) 答案就是 \([x^ny^k]F(x,y)\)
考虑应用 SEQ的含义,简记上述生成函数为 \(F,\) 则有:
其中,\(x\) 计量前多少个球,\(y\) 计量划分成几组。
那么其组合意义可以解释为:如果 \(x\) 没有被选择,那当前 \(F\) 中所有 \(y\) 项不变;如果它被单独划分为一组,那所有 \(y\) 都会平移一位;而如果它和它前一个球一起被划分成一组,那 \(y\) 就需要平移两个位置了。或者说对应那个位置的点值由这一位转移过去。
- 求 01 序列,\(0\) 的连续段长度 \(\leq k-1\) 的方案数。
考虑对本质进行划分,其必然可以表示为一个 \(1\) 后面拼接若干不超过 \(k-1\) 个 \(0,\) 但其开头可以是不超过 \(k-1\) 个 \(0.\) 记录一个单位长度为 \(Z,\) 则其生成函数为:
括号前面是考虑拼接了几个 \(0,\) 后面是考虑拼接了多少段 \(1000\cdots\)
幂集
定义:全部子集
对于组合类 \(\mathcal{A},\) 其幂集组合类记为 \(\text{PSET}(\mathcal{A})\)
考虑枚举每一个元素是否存在,则容易得到:
意义很简单,就是不选对应 \(1,\) 选就对应其元素大小,然后乘在一起。
那么就可以对其取 \(\ln\) 再逆回去:
其中 \(i\) 是元素大小,\(A_i\) 是大小为 \(i\) 的元素有多少个。
继续:
其中 \(A(z)\) 是 \(A_i\) 的生成函数。
多重集
实际上就是上述幂集每一个元素不再只是选或不选了,变成可以选择无数个了。也就自成了 SEQ 对应每一个位置有序
按照上面推:
- 非空无标号有根树生成函数
组合意义:考虑先上一个根,然后观察其儿子特点,其儿子的数目不限,大小也不限。那么 \(T\) 本质上对于节点数为 \(i\) 的非空无标号有根树计数,那我直接将 \(T\) 进行 \(\text{MSET}\) 即多重集选取即可。这里也注意一下儿子没有顺序,所以子树大小也是没有顺序的,直接按从小到大选择即可,对应了上述的 多重集。
复合
考虑两个组合类复合的意义 \(A\circ B\),实际就是把 \(A\) 的元素的单位大小替换为 \(B.\)
例子 CF438E
考虑有根无标号二叉树区分左右儿子的生成函数:
那么现在考虑对单点进行复合权值的操作,其对应生成函数为:
然后求 \(T(W(x))\) 即可。
EGF
这样表示实际上是为了把二项卷积变成普通卷积
对应有标号计数
通常有标号计数都比无标号简单,因为有标号没有那么多等价类需要判重
它的运算对应:\(\text{SET}\)
集合 \(SET\)
考虑把一个有标号组合类组合成大小不定集合的方案数。注意这里是集合,考虑先用 \(\text{SEQ}\) 运算组合后去重。
观察到,\(\text{SEQ}\) 组合实际上是对应一个大小为 \(L\) 的集合算了 \(L!\) 遍,实际上集合只能算一遍。因为 \(\text{SEQ}\) 对应顺序计数,在有标号情况下其对应计算了所有的排列可能。
所以对应 \(\text{SET(x)}=\sum_{i\ge 0}\frac{A^i}{i!}x^i=\exp(A)\)
- 有标号非空有根树计数
考虑把一个根塞到一堆有根非空有标号森林里面形成一棵树。
那么,森林计数就是相当于求了 \(T\) 的一个集合。注意 \(\text{SET}\) 运算也对应着 有标号。
于是, \(T=x\exp(T)\)
- 错排的 EGF
考虑错排本质如何划分:其对应了若干置换环。
注意错排本身是带标号的。
那么错排本质就是找一堆环组成排列,并且环的大小至少为 \(2.\)
考虑关于环大小的 \(EGF:\)
接下来考虑关于错排的组合:实际上是所有大小非 \(1\) 的环的组合,即
- 有标号连通图计数
考虑有标号图计数。
图是由许多连通图组合而成的,对上式取 \(\ln\) 即可。
- 有标号仙人掌计数