解析组合学习笔记

用代数运算避免组合意义的尝试

参考(抄袭)自:

  • \(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\)是因为我们算的是有根的,事实上是无根的.
posted @ 2021-03-27 20:07  y_dove  阅读(462)  评论(0编辑  收藏  举报