双重计数的简单应用
什么是双重计数
双重计数就是就是计数同一个事物考虑两种计算方式,得到两个看上去没有联系的表达式相等,从而得到优美的公式的一种方法。通常也被称作“多重计数”或者“双计数”。
应用
组合恒等式
大小为
这应该是双计数最基础的运用了吧。
我们递推组合数时经常会用到这样的公式:
证明它十分简单,只需要将组合数公式展开约分即可。但是形象的组合证明也许更好,因此我们来考虑二元组
- 如果先计数集合
$A$ ,再计数$x$ :集合$A$ 的数量为${n \choose k}$ ,从中选出一个元素的方案数为$k$ ,所以总方案数为$k{n \choose k}$ 。 - 如果先计数
$x$ ,再计数$A$ :首先$x$ 有$n$ 种选法,然后考虑从剩下的$n - 1$ 个元素里面来选出$k - 1$ 个元素,即可得到一个大小为$k$ 的子集$A$ 。因此总方案数为$n{n - 1 \choose k - 1}$ 。
由于我们计数的是同一个东西,所以
Burnside 定理
Burnside 定理的证明本身就是一个巧妙的双计数,具体的证明过程就不在这里展出,各位可以参考网上的相关资料或者这篇博客。
无标号的有根树计数
无标号的有根树表示我们所计数的树是有一个固定的根节点,但是同构的树只能算一个。为了方便,我们令
蓝色的节点是根节点,第一棵树和第二棵树虽然本质上一模一样,但是由于树根的不同,所以算作不同的树。而第三棵树和第一棵数仅仅只是子树顺序的调动,由于节点没有编号,所以认为与第一棵树是同构的。
如何计数这样的东西?首先有一个明显的特征就是树根是固定的,而每一棵子树又是一棵有根树,所以我们来考虑递推:设
而
现在我们来考虑使用双计数的技巧,尝试计数二元组
- 考虑先计数
$T$ ,后计数$x$ :总共的$T$ 共有$t(n)$ 个,其中非根节点数量为$n - 1$ 个,故总方案数为$(n - 1)t(n)$ 。 - 考虑先计数
$x$ ,后计数$T$ :首先假定$x$ 在一个大小为$m$ 的某个子树中,这样的子树一共有$t(m)$ 种,而子树上的$x$ 有$m$ 种,所以一共有$mt(m)$ 种。然后注意到跟它相同的子树可能不止一个,而我们的$x$ 都要枚举到。当$x$ 在第一棵上这样的子树时,方案数为$t(n - m)$ ,在第二棵时,方案数为$t(n - 2m)$ ......所以我们可以得知方案数为$\sum_{1 \leqslant km < n} t(n - km)$ 。由于$x$ 在不同的大小的子树中,所以总方案数为$\sum_{m = 1}^{n - 1}mt(m)\sum_{1\leqslant km<n}t(n-km)$
联立两式相等,我们可以得知:
通过枚举
这样就可以方便的在
无标号的无向连通简单图计数
上述方法可以继续套用到无向图上来,首先我们设
关于
首先,我们考虑计数二元组
- 先计数
$G$ 后计数$x$ :显然方案数为$ng(n)$ 。 - 先计数
$x$ 后计数$G$ :考虑$x$ 在一个大小为$t$ 的连通块中,按照类似的方法,我们可以得知这样的$x$ 有$tf(t)$ 种。另外,我们还需要枚举它是$G$ 中第几个这样的连通块,这样的方案数是$\sum_{1 \leqslant kt \leqslant n} h(n - kt)$ 种。
所以,我们得到:
因此知道了
然而,我并没有找到更好的计算