广义容斥原理
最近在复习/学习容斥,写一点总结上来。
说实话我真的觉得广义容斥才是应该给初学者学的,不然直接看到一个 \((-1)^{i}\) 这么抽象的容斥系数,谁想得到它是省略了 \(\binom{i}{0} = 1\) 的形式啊。
补充:最近学二项式反演的时候发现至少这种定义并不严谨,正确的说法应该是钦定,如果看到哪里出现了至少/至多这种词语请把它视为钦定。
广义容斥原理
定理
给定集合 \(N\) 和 \(n\) 个性质 \(P_{i}\),令集合中具有性质 \(P_{i}\) 的元素构成的子集为 \(A_{i}\)。
有计数函数 \(\alpha(k)\):
特别地,\(\alpha(0) = \left|N\right|\)。
上面这个式子可能不太容易看懂,所以下面罗列几个。
则 \(\alpha(k)\) 计数了具有 \(k + i\) 种性质的元素 \(\binom{k + i}{k}\) 次(其中 \(0 \leqslant i \leqslant n - k\))。
这一点应该比较好证明,可以直接从组合意义上理解:一个元素有 \(k + i\) 种性质,在统计至少有 \(k\) 种性质的元素时,这个元素的每 \(k\) 种性质就会使其产生 \(1\) 的贡献,而这个「每 \(k\) 种性质」一共会有 \(\binom{k + i}{k}\) 种。
令 \(\beta(k)\) 表示集合 \(N\) 中恰有 \(k\) 种性质的元素个数。
则有:
如果直接写成展开的形式的话,就是:
证明的话有两种方式:
- 从组合意义上理解/感性理解:
因为 \(\alpha(k)\) 计数了具有 \(k + i\) 种性质的元素 \(\binom{k + i}{k}\) 次,而我们需要恰有 \(k\) 种性质的元素,所以从 \(\alpha(k)\) 开始累加。
然后把多余的 \(\alpha(k + 1)\) 给减掉,又因为减掉 \(\alpha(k + 1)\) 的时候会多减掉 \(\alpha(k + 2)\)(也就是 \(\alpha(k + 2)\) 对 \(\beta(k)\) 产生了负数的贡献),所以要加回来。
如此反复,直到算到 \(\alpha(n)\) 为止,再往后的 \(\alpha(n + 1)\) 就没有意义了(或者你也可以理解为值为 \(0\))。
- 数学证明
将集合中的元素分成三部分:性质数量少于 \(k\) 的,性质数量等于 \(k\) 的和性质数量大于 \(k\) 的。
证明上面公式就是证明第一部分和第三部分的每个元素的贡献为 \(0\),并且第二部分的每个元素的贡献为 \(1\)。
首先第一部分是显然的,因为公式从 \(\alpha(k)\) 开始累加,并且根据 \(\alpha(k)\) 的定义,我们计算的时候从未涉及到性质数量小于 \(k\) 的元素,故这一部分的元素的贡献为 \(0\)。
第二部分也比较简单,涉及到性质数量为 \(k\) 的元素的 \(\alpha(i)\) 只有 \(\alpha(0) \sim \alpha(k)\),又因为 \(\alpha(0) \sim \alpha(k - 1)\) 没有被计算,并且 \(\alpha(k)\) 的系数为 \(+1\),所以这一部分的元素的贡献恰为 \(1\)。
第三部分的证明需要用到一点组合数相关知识,不过不会也没关系。
现在考虑性质数量大于 \(k\) 的元素,假设其性质数量为 \(k + m\ (1 \leqslant m \leqslant n - k)\),我们知道 \(\alpha(k + i)\) 计数了具有 \(k + m\) 种性质的元素 \(\binom{k + m}{k + i}\) 次,所以在项 \((-1)^{i}\binom{k + i}{k}\alpha(k + i)\) 中,具有 \(k + m\) 个性质的元素就被计算了 \((-1)^{i}\binom{k + i}{k}\binom{k + m}{k + i}\) 次。
简单的做一个转化,因为 \(\binom{n}{m}\binom{m}{r} = \binom{n}{r}\binom{n - r}{m - r}\),所以有 \((-1)^{i}\binom{k + i}{k}\binom{k + m}{k + i} = (-1)^{i}\binom{k + m}{k}\binom{m}{i}\)。
然后把整个式子中有 \(k + m\) 种性质的元素的贡献加起来:
而 \(\sum\limits_{i = 0}^{m} (-1)^{i}\binom{m}{i}\) 这一部分 可以用二项式定理化成 \((1 - 1)^{m}\),也就是 \(0\)。
所以第三部分的元素的贡献也为 \(0\)。
注意到 \(k\) 取到较为特殊的值时,即 \(k = 0\),\(\beta(0)\) 就是我们熟悉的狭义容斥原理公式:
这个 \((-1)^{i}\) 也是我们熟悉的容斥系数。
意义
考虑 \(\alpha(k)\) 和 \(\beta(k)\) 有什么意义。
从上面的定理不难看出,\(\alpha(k)\) 统计了性质不少于 \(k\) 的所有元素,并且统计次数会因为其性质个数而改变。
而 \(\beta(k)\) 则是统计了恰好具有 \(k\) 种性质的元素个数。
我们通过反复地加减 \(\alpha(k + i)\),使得最终性质数量为 \(k\) 的所有元素恰好被统计了 \(1\) 次。
从集合的角度来讲的话(满足某种性质的元素构成的集合,也就是每个集合代表着若干种性质),这里称集合代表的性质个数为这个集合的权值,我们每次加减 \(\alpha(k + i)\) 就相当于是给所有权值为 \(k + i \sim n\) 的集合打上标记, 最后使得权值为 \(k\) 的集合的标记和为 \(+1\) 而其余集合的标记和为 \(0\)。
亦可以把容斥看成一种差分,这里的差分区别于普通的差分的地方在于:它的系数不尽相同。
回想 \(\alpha(k)\) 和 \(\beta(k)\) 的定义,\(\alpha(k)\) 是在统计性质数量至少为 \(k\) 的元素数量,也就是性质数量为 \(k \sim n\) 的元素。而 \(\beta(k)\) 是在统计性质数量恰好为 \(k\) 的元素。
考虑 \(\alpha(k)\) 和 \(\beta(k)\) 之间的关系,可以理解为 \(\beta(k)\) 是包含于 \(\alpha(k)\) 的,求 \(\beta(k)\) 的过程与差分的过程也很相似。
用处
为什么需要容斥?
其实原因很显然,就是我们若要直接求解 \(\beta(k)\),可能会非常麻烦或是复杂度过高,倘若此时计算 \(\alpha(k)\) 相较于 \(\beta(k)\) 轻松很多或是复杂度更小,那么可以利用 \(\alpha(k)\) 来计算 \(\beta(k)\)。
同时容斥原理不仅是利用 \(\alpha(k)\) 计算 \(\beta(k)\),还有容斥原理逆运用,但是这一点对选手对容斥原理的掌握和理解的要求程度更高。
比如题目直接给出了类似 \(\beta(k) = \sum\limits_{i = 0}^{n - k}(-1)^{i}\binom{k + i}{k}\alpha(k + i)\) 的式子,这里的 \(\alpha(k + i)\) 一般不会很明显,但是我们可以比较轻易的推出类似上面公式的式子。
如果这里的 \(\alpha(k + i)\) 计算复杂度过高就不能直接这么整了。
我们可以去分析 \(\alpha(k + i)\) 的含义,从而推导出 \(\beta(k)\) 的意义,这里就有很大可能我们会发现直接求 \(\beta(k)\) 会比原来的式子方便许多,这样的过程就是容斥原理的逆运用,其难点是发现题目给出的式子可以转变为容斥的形式并且思考出其代表的意义。
本文来自博客园,作者:A_box_of_yogurt,转载请注明原文链接:https://www.cnblogs.com/A-box-of-yogurt/p/18016413