无标号计数与带标号计数
本文为转载
原文地址:http://www.cnblogs.com/Sdchr/p/7572978.html
无标号计数与带标号计数
无标号就是在观测上不考虑个体的差异, 带标号就是在观测上考虑个体的差异.
对于无标号计数, 我们可以按照某种关键值, 给所有的元素进行定序, 所有无标号计数等价于定序计数.
对于带标号计数, 我们可以任意设置关键值, 所以带标号计数等价于不定序计数.
最常见的例子就是组合与排列, 它们还满足一组特殊的关系: 组合数 * n! = 排列数.
有向图 / 无向图
带标号无向图的 度数的K次方 的和
分析
$$ans = n \sum_{d = 0} ^ {n - 1} \binom{n-1}{d} d ^ K 2 ^ {\binom{n-1}{2}} = n 2 ^ {\binom{n-1}{2}} \sum_{d = 0} ^ {n - 1} \binom{n-1}{d} d ^ K$$
$$\begin{aligned} \sum_{d = 0} ^ n \binom{n}{d} d ^ K & = \sum_{d = 0} ^ n \binom{n}{d} \sum_{i = 0} ^ K S_2(K, i) d ^ {\underline{i}} \ & = \sum_{d = 0} ^ n \binom{n}{d} \sum_{i = 0} ^ K S_2(K, i) i! \binom{d}{i} \ & = \sum_{i = 0} ^ K S_2(K, i) i! \sum_{d = i} ^ n \binom{n}{d} \binom{d}{i} \ & = \sum_{i = 0} ^ K S_2(K, i) i! \sum_{d = i} ^ n \binom{n}{i} \binom{n - i}{d - i} \ & = \sum_{i = 0} ^ K S_2(K, i) i! \binom{n}{i} \sum_{d = i} ^ n \binom{n - i}{d - i} \ & = \sum_{i = 0} ^ K S_2(K, i) i! \binom{n}{i} \sum_{d = 0} ^ {n - i} \binom{n - i}{d} \ & = \sum_{i = 0} ^ K S_2(K, i) n ^ {\underline{i}} 2 ^ {n - i} \end{aligned}$$
$$S_2(m, k) = \frac{1}{k!} \sum_{s = 0} ^ {k} \binom{m}{s} (-1) ^ s (k - s) ^ m$$
小结
看到 \(x ^ k\) , 可以尝试使用 Stirling 数进行展开.
带标号无向图的 度数之和/边数 的K次方
分析
记 \(m(s)\) 为图 \(s\) 的边数, 则所求可以通过边数进行转化.
\(ans = \sum_{s} (\sum_{i} d_i) ^ K = \sum_{s} (2m(s)) ^ K = 2 ^ K \sum_{s} m(s) ^ K\) .
\(\begin{aligned} \sum_{s} m(s) ^ K & = \sum_{s} \sum_{i} S_2(K, i) i! \binom{m(s)}{i} \\ & = \sum_{i} S_2(K, i) i! \sum_{s} \binom{m(s)}{i} \end{aligned}\) .
考虑 \(f(i) = \sum_{s} \binom{m(s)}{i}\) 的组合意义, 即对于所有的 n 个点的简单图, 求取出 \(i\) 条边的方案数的和. 那么显然枚举选取结果, 然后其余随便选不选, 即 \(f(i) = \binom{\binom{n}{2}}{i} 2 ^ {\binom{n}{2} - i}\) .
带标号无向连通图计数
**分析
**
设 n 个点的带标号无向连通图的个数为 \(f_n\) , n 个点的带标号无向图的个数为 \(g_n\) .
显然 \(g_n = 2 ^ {\binom{n}{2}}\) .
第一种想法是建立 \(f_n\) 的递推式.
\(f_n = g_n - \sum_{i = 1} ^ {n-1} \binom{n-1}{i-1} f_i g_{n-i}\) .
第二种想法是建立 \(f_n\) 与 \(g_n\) 的关系.
设 \(g\) 的指数型生成函数为 \(G\) , \(f\) 的指数型生成函数为 \(F\) .
现在要进行排列计数, 且合并次数任意, 所以 \(G = e ^ {F(x)}\) , 即 \(F(x) = \ln G\) .
小结
对于 "连通图" 的限制条件, 我们通常有两种想法:
① 考虑计算 \(f_n\) . 我们去掉这个限制条件, 再减去不连通的图的个数. 至于不连通图的图的个数, 我们考虑枚举 1 号点所在的连通块的大小, 然后就可以进行递推了, 还可以使用 FFT 进行优化.
② 考虑构建指数型生成函数, 进行排列计数, 且合并次数任意, 所以 \(G = e ^ {F(x)}\) .
树
带标号 有根树/无根树 计数
分析
我们对于一棵 n 个带标号节点的无根树, 每次选择标号最小的叶子节点, 把与它相邻的点加入 prufer 序列中, 然后删除该点, 可以唯一地构造长度为 n-2 的prufer序列.
对于一个长度为 n-2 , 每一项在 1 到 n 之间的数列, 我们把每个节点的度数求出来, 然后每次将度数为 1 , 标号最小的点与 prufer 序列的当前项进行连边, 然后把两个点的度数减 1 , 可以唯一地逆构造成一棵 n 个节点, 带编号的无根树.
由此知道, n 个节点的无根树, 与长度为 n-2 , 各项在 1 到 n 之间的 prufer 序列一一对应.
n 个节点, 带编号的无根树有 \(n ^ {n-2}\) 种.
对于有根树, 我们对无根树选定一个根, 所以有 \(n ^ {n - 1}\) 种.
小结
树的计数的相关问题, 我们要想到 prufer 序列.
每个点度数确定的带标号树的个数
分析
设第 i 个点的度数为 \(d_i\) , 那么 prufer 序列中, \(i\) 出现的次数为 \(d_{i-1}\) 次, 所以答案为 \(\binom{n-2}{d_1-1, d_2-1, ..., d_n - 1}\) .
基环树计数
分析
我们枚举环的大小 s , 选取 s 个节点作为环上的点, 再枚举环的结构, 即乘上系数 \(\binom{n}{s} (s-1)!\) .
接下来考虑统计 n 个节点划分为 s 棵根节点确定的有根树的方案数.
如上图所示, 我们建立一个虚拟节点, 将所有的根节点与这个虚拟节点, 虚拟节点的权值设置为无穷大 INF , s 个根节点的设置为比无穷大小一点的无穷大 INF‘ , 现在相当于统计这棵树的 prufer 序列的个数, 满足长度为 n+1-2 = n-1 , 第 1 位到第 n-1-s 位为任意, 第 n-s 位为 INF‘ , 第 n-s+1 位到第 n-1 位为 INF , 所以方案数为 \(n ^ {n - s - 1} s\) .
二叉树
无标号二叉树计数
分析
设 \(f_n\) 为 \(n\) 个点的无标号二叉树个数.
先给结论, \(f_n\) 为卡特兰数的第 \(n\) 项 \(C_n = \frac{\binom{2n}{n}}{n+1}\) .
边界为 \(f_0 = 1\) .
转移时我们考虑枚举左边的点的个数, 可以得到 \(f_n = \sum_{i + j + 1 = n} f_i f_j\) .
构建 \(f_0, f_1, ...\) 的生成函数 \(F(x) = \sum_{i} f_i x ^ i\) .