解析组合学习笔记
用代数运算避免组合意义的尝试
参考(抄袭)自:
- \(command\)_\(block\)的\(blog\)多项式计数杂谈
- \(x义x\)的\(blog\)组合结构符号化
不保证正确性- 一些定义:\(\mathcal{A}\)表示组合类,\(A\)表示生成函数,\(z\)为一个满足乘法运算法则的符号,记\(\alpha \in \mathcal{A}\)的幂表示为\(z^{|\alpha|}\),即忽略其他信息,只关注大小
- \(\mathcal{E}表示空,\mathcal{Z}表示单一元素\)
- 核心思想,复杂的组合类可以由更简单的组合类通过一些基本变换来表示,从而避免组合意义,直接导出生成函数
\(OGF\):
- 定义两个组合类合并在一起为笛卡尔积,记作\(\mathcal{A} = \mathcal{B} * \mathcal{C},A = B * C\)
- \(AMP_k(\mathcal{A})表示每个元素扩大k倍\),即\(B(z) = A(z^k)\)
- \(SEQ(\mathcal{A})\):定义为以\(\mathcal{A}\)为基础元素的有序列表
- 即\(SEQ(\mathcal{A}) = \sum_{i}\mathcal{A}^{i},B(z) = \frac{1}{1 - A(z)}\),注意\(A[0] = 0\),所以后面所以基于\(SEQ\)变换的变换都有常数项为\(0\)
考虑置换意义下的等价类
- 记\([X/G]表示X在G意义下的等价类集合\)
- 经典\(burnside\)引理:\(|X/G| = \frac{1}{|G|}\sum_{g \in G}|X^g|\)
- \(|X^g| = \{x|g(x) = x\}\)翻译成人话就是在置换\(g\)下不动点的集合
- \(CYC(\mathcal{A})\)定义为生成无标号环构造
- 定义\(G_C\)为全体环置换的群
- \(CYC(\mathcal{A}) = (SEQ(\mathcal{A}) - \mathcal{E}) / G_C\)
- 考虑\(burnside\)引理
- \(CYC_{k}(\mathcal{A}) = \frac{1}{k}\sum_{i = 0}^{k-1}(AMP_{gcd(i,k)}\mathcal{A})^{k/gcd(i,k)}\)
- \(B_k(z) = \frac{1}{k} \sum_{i = 0}^{k-1}A(z^{gcd(i,k)})^{k / gcd(i,k)}\\= \frac{1}{k}\sum_{d|k}\varphi(d)*A(z^d)^{k/d}\)
\[\begin{aligned}
B(z) &= \sum_{k}B_k(z)\\
&= \sum_{d = 1}\frac{\varphi(d)}{d}\sum_{i}\frac{A(z^d)^i}{i}\\
&= \sum_{d = 1}\frac{\varphi(d)}{d}\ln(\frac{1}{1-A(z^d)})
\end{aligned}\]
重点.MultiSet transform
- \(MSET\)变换,又叫\(Polya\ exp\),欧拉变换?
- 定义无标号生成无序集合
- 记\(G_U\)为全体置换构成的群.
- 有\(MSET(\mathcal{A}) = (SEQ(\mathcal{A} - \mathcal{E})) / G_U\)
- 因为生成函数有直接的组合意义,就不用\(burnside\ Lemma\)了
我推出不来 - \(B(z) = \sum_{i \geq 1}\prod(1+x^i+x^{2*i}...)^{A_i}\\ = \sum_{i \geq 1}(\frac{1}{1-x^i})^{A_i}\)
\[\begin{aligned}
B(z) &= exp(In(B(z)))\\
&= exp(\sum_iA_i*In(\frac{1}{1-x^i}))\\
&= exp(\sum_iA_i*\sum_{j}\frac{x^{ij}}{j})\\
&= exp(\sum_{j}\frac{A(x^j)}{j})
\end{aligned}\]
- 例题:无标号无根树计数
- 题意简述:求\(n\)个点的无标号无根树数量
- 先考虑求有根树
- 那么有\(\mathcal{T} = \mathcal{Z} * MEST(\mathcal{T})\)
- 上生成函数
- 有\(T(x) = x * exp(\sum_{i}\frac{T(x^i)}{i})\)
- 套路地,两边同时取\(\ln\),并求导
- \(\frac{T'}{T} = \frac{1}{x} + \sum_{i}T'(x^i)*(x^{i-1})\)
- \(x * T'[x^n] = T[x^n] + T*\sum_{i}T'(x^i)*x^i[x^n]\)
- 令\(G = \sum_iT'(x^i)*x^i\)(注意到求导带来的平移刚好被后面的\(x^i\)抵消)
- 注意此处的\(T'(x^i)\)定义为\(\frac{d(T(x^i))}{d(x^i)}\)
- 因为\(\frac{d(T(x^i))}{dx} = \frac{d(T(x^i))}{d(x^i)} * \frac{d(x^i)}{dx}\)
- 而\(d(x^i)/dx = x^{i-1}*i\)我们在前面已经乘进去了
- 所以\(:\)
- \(g[n] = G[x^n] = \sum_{d|n}T[d] * d\)
- 那么\(n * T[n] = T[n] + \sum_{i = 1}^{n-1}T[n-i] * G[i]\)
- 半在线卷积即可.同样参考\(command\)_\(block\)的\(blog\)半在线卷积小记
- 我们考虑无根树答案是什么
- 我们考虑强行钦定重心为根,那么凡不是重心的,就必有一个子树大于\((n/2)\)
- 所以\(ans = f[n] - \sum_{i = n / 2 + 1}^{n-1}f[i]*f[n-i]\)
- 如果n是偶数,还要处理两个重心的情况,即\(ans -= \binom{f[n/2]}{2}\)
- \(orz\) \(command\)_\(block\)
\(EGF\)
- 考虑\(\alpha,\beta\)的笛卡尔积为\(\binom{|\alpha + \beta|}{|\alpha|,|\beta|}\)
- 定义\(\mathcal{A}\)生成函数为\(A(z) = \sum_{\alpha \in \mathcal{A}}\frac{z^{|\alpha|}}{|\alpha|!} = \sum_{i}A[i]*\frac{z^i}{i!}\)
- \(SEQ\)变换\(:\)同\(OGF\)部分
- \(SET\)变换:定义为有标号生成集合个数
- \(\mathcal{B} = SET(\mathcal{A}) = SEQ(\mathcal{A}) / G_U\)
- 因为有标号,所以在除了单位置换的任意置换下,都不是不动点
- 考虑\(burnside\ Lemma\):\(B_k(z) = \frac{1}{k!}A^k\)
- \(B = \sum_{B_k} = \sum_{k}\frac{A^k}{k!} = exp^{A}\)
\(tips:the\ difference\ between\ SEQ\ and\ SET\)
注意从定义出发,SEQ是生成有序列表,SET是生成无序集合.重点看生成元素组合时是否有序\(\\\)
不要将有序/无序和有/无标号混在一起
例题射命丸文的笔记
- 对于每一个\(n \leq N\),求\(n\)个点有标号存在哈密顿回路的竞赛图的期望哈密顿回路条数
- \(N \leq 1e5\)
- 首先考虑哈密顿回路的个数,发现本质不同的哈密顿回路有\((n-1)!\),相当于环排列,并且每种哈密顿回路出现次数均为\(2^{\binom{n}{2}-n}\),从组合意义理解就是钦定\(n\)条边方向,剩下乱选
- 问题转化成存在哈密顿回路,即强连通的竞赛图数目
- 考虑任意一个非强连通的竞赛图,都可以通过缩点仍然变成一张\(DAG\),并且每个大点都是一张强连通竞赛子图.
- 由因为是\(DAG\),并且是竞赛图(两两之间有一条有向边),所以缩点后的图存在的边方向必然是唯一的,否则仍然会出现环,就和\(DAG\)相矛盾.
- 所以不是强连通的竞赛图,必然也可以表示为两个以上的强连通竞赛图组合.设任意竞赛图为\(\mathcal{G}\),联通的竞赛图为\(\mathcal{G_{con}}\),\(\mathcal{G_{con}}\)的\(EGF\)是显然的
- 由上面推论由\(\mathcal{G} = SEQ(\mathcal{G_{con}})\)
- 注意由于拓扑序,这个组合是有序的,所以用\(SEQ\),而非\(SET\)
- 所以\(G = \frac{1}{1 - G_{con}}\)
例题THUPC2018好图计数
- 题意简述:递归定义一张无标号无向图是好图,当且仅当这三种情况
- 是一个独立的点
- 是若干个好图组合成的
- 其补图是好图
- \(T\)组询问,求\(n\)个点的好图数
- \(T \leq 233,n \leq 23333\)
- 先说一下,因为一些玄学原因,这题正解是\(O(n^2)\)
-
solution
- 我们考虑设联通好图组合类为\(\mathcal{G}_{con}\),好图组合类为\(\mathcal{G}\)
- 显然地有\(\mathcal{G} = MSET(\mathcal{G_{con}})\)
- 观察可得,一个非联通好图的补图一定是联通好图,反之亦然,单点除外,于是有\(G = 2 * G_{con} - z + 1\)
- 提取系数,因为有两个等式,相当于二元一次方程,可以解出一个\(n^2\)的递推式
- code
- 补充:若\(\mathcal{F} = MSET(\mathcal{G})\),则\(F[0] = 1,G[0] = 0\),\(SET\)变换也是一样的
例题边双连通图计数
- 题意简述:计算\(n\)个点有标号的边双连通图(整张图是一个边双连通分量)
- 我们考虑钦定一个点为根.设\(G\)为有根的边双连通图的\(EGF\),\(H\)为有根联通图的\(EGF\),(就是连通图\(* n\))
- 考虑一张连通图如果不是边双连通图,我们通过缩点可以把它变成树,我们枚举根节点所在的连通块大小,且每个其他连通块与跟连通块只有一条从它们的根到根连通块的边,即\(i \circ \mathcal{H}\)
- 有\(\mathcal{H} = \sum_i\mathcal{G_i} * SET(i * \mathcal{H})\)
- 写成生成函数的形式就是\(H = \sum_{i}\frac{G_i}{i!} * z^i * exp(i * H)\)\(\\\)
\(= \sum_{i}\frac{G_i}{i!}(z * exp(H))^i\) - 因为我们要求的是\(G\),所以是要求一个类似于复合逆的东西.考虑拓展拉格朗日反演,令\(F = z * e^{H(z)}\)
- 所以\(H(z) = G(F(z))\)
- \(H(F^{-1}(x)) = G(x)\)
- 所以\(H(F^{-1}(x))[x^n] = \frac{1}{n}[x^{n-1}](\frac{x}{F(x)})^nH'(x)\)
- \(G(x)[x^n] = \frac{1}{n}[x^{n-1}](e^{-n*H(x)})*H'(x)\)
- \(ans = (G(x)[x^n] * n!) /n\)除以\(n\)是因为我们算的是有根的,事实上是无根的.