容斥原理 (n=2) 设 `A, B` 为有限集, 则 `|A uu B| = |A| + |B| - |A nn B|`.
容斥原理
设 `S` 为有限集, `A_1, A_2, cdots, A_n` 为 `S` 的子集, 则
`|uuu_(i=1)^n A_i|`
`= sum_(k=1)^n (-1)^(k-1) sum_(1 le i_1 lt cdots lt i_k le n)
|nnn_(j=1)^k A_(i_j)|`.
即 `n` 个集合的并集的基数, 等于它们每个集合的基数之和,
减去每两个集合的交的基数之和, 加上每三个集合的交的基数之和...
最后加上 `(-1)^(n-1)` 乘以所有集合的交集的基数.
记 `N = {1, 2, cdots, n}`, `bar A_i = S - A_i`, `nnn_(j in O/) = S`,
上述等式取补集后, 可用更加紧凑的记号写成
`|nnn_(i=1)^n bar A_i|`
`= sum_(C sube N) (-1)^|C| |nnn_(j in C) A_j|`.
归纳证明.
`n = 1, 2` 的情形已经成立.
设 `n-1` 时命题成立, 下证
`|uuu_(i=1)^n A_i|`
`= sum_(O/ != C sube N) (-1)^(|C|-1) |nnn_(j in C) A_j|`.
由引理,
左边 `= |(uuu_(i=1)^(n-1) A_i) uu A_n|`
`= |uuu_(i=1)^(n-1) A_i| + |A_n| - |uuu_(i=1)^(n-1) (A_i nn A_n)|`
`= sum_(O/ != C sube N-1) (-1)^(|C|-1) |nnn_(j in C) A_j| + |A_n|`
`+ sum_(O/ != C sube N-1) (-1)^|C| |nnn_(j in C) (A_j nn A_n)|`
`=` 右边.
记 `a_k` 为每 `k` 个集合的交集的基数之和, `b_k` 为那些恰好属于 `k` 个集合的元素的个数,
`k = 1, cdots, n`. 于是
`a_k := sum_(C sube N, |C| = k) |nnn_(j in C) A_j|`,
`b_k := |uuu_(C sube N, |C| = k) nnn_(j in C) A_j| - |uuu_(C sube N, |C| = k+1) nnn_(j in C) A_j|`.
`a_k` 中的一些元素被重复计算了, 事实上
`a_1 = (1;1) b_1 + (2;1) b_2 + cdots + (n;1) b_n`,
`a_2 = (2;2) b_2 + (3;2) b_3 + cdots + (n;2) b_n`,
`cdots`
`a_n = (n;n) b_n`.
利用组合恒等式 `sum_(k=0)^n (-1)^k (n;k) = 0`, 两边交错求和即得
`sum_(k=1)^n (-1)^(k-1) a_k = sum_(k=1)^n b_k`.
容斥原理还可用 Möbius 反演导出, 参见下节.
容斥原理 (对称情形) 在容斥原理中, 如果假设 `A_1, cdots, A_n` 中任意 `k` 个的交的基数都只和 `k` 有关, `k = 1, cdots, n`, 记 `S_0 := S`, `S_k := nnn_(i=1)^k A_i`, 则 `|nnn_(k=1)^n bar A_k| = sum_(k=0)^n (-1)^k (n;k) |S_k|`.
| `n` | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| `D_n` | 1 | 0 | 1 | 2 | 9 | 44 | 265 | 1854 | 14833 | 133496 |
以集合 `A_k` 记所有使第 `k` 封信装进对的信封的安排, `S_k := nnn_(i=1)^k A_i`, 则 `|S_k| = (n-k)!`. 于是 `D_n = |nnn_(k=1)^n bar A_k|` `= sum_(k=0)^n (-1)^k (n;k) (n-k)!` `= sum_(k=0)^n (-1)^k (n!)/(k!)`. 所求极限为 `lim_(n to oo) sum_(k=0)^n (-1)^k 1/(k!) = "e"^-1`.
证明生成函数. 记
`f(x) = sum_(n ge 0) D_n/n! x^n`,
`f'(x) = sum_(n ge 0) D_(n+1)/n! x^n`,
`f''(x) = sum_(n ge 0) D_(n+2)/n! x^n`,
由递推公式 `D_(n+2) = (n+1)(D_n + D_(n+1))` 得到
`f'' = (x f)' + (x f')'`,
`f(0) = D_0 = 1`, `f'(0) = D_1 = 0`.
用 Wolfram 求解上述方程即可 (sympy.dsolve 只得到级数解).
错排可以用有向图表示, 其中每个连通分量都是一个圈.
n 对夫妇问题 `n` 对夫妇坐成一横排, 问有几种坐法, 使得每一对夫妇的位置都不相邻.
以集合 `A_k` 记所有使得第 `k` 对夫妇坐在一起的排列, `S_k := nnn_(i=1)^k A_k`. 设前 `k` 对夫妇两两坐在一起, 他们合并后, 可以看作 `2n-k` 个人的全排列, 于是 `|S_k| = 2^k (2n - k)!`, `quad k = 1, 2, cdots, n`. 所求的数为 `|nnn_(k=1)^n bar A_k|` `= sum_(k=0)^n (n;k) (-2)^k (2n-k)!`.
长度为 `k` 的子集链数目 [群友@我是蒟蒻的泰博定理] 设集合 `A` 有 `n` 个元素, 取 `A` 的子集满足真包含关系: `A_1 sub A_2 sub cdots sub A_k`, 这样的取法有几种? 换言之, `A` 的全体子集按包含关系组成的偏序中, 长度为 `k` 的链有几条?
[来自洛谷@Gorenstein]
本节讨论的是数论中经典 Möbius 反演在有限偏序集上的推广.
有限偏序集上的二元函数及其卷积
设 `(X, le)` 为有限偏序集, `R_(le) = {(x, y): x le y}`.
记 `cc F(X)` 是全体二元函数 `f: R_(le) to RR` 的集合.
若 `(x, y) !in R_(le)`, 补充定义 `f(x, y) = 0`, 于是
`cc F(X) := { f: X xx X to RR: x le y "不成立" rArr f(x, y) = 0 }`.
例如, 下面两个函数都是 `cc F(X)` 的成员:
`zeta(x, y) = {1, if x le y; 0, otherwise:}`,
`delta(x, y) = {1, if x = y; 0, otherwise:}`.
对任意 `f, g in cc F(X)`, 定义卷积如下:
`(f ast g)(x, y) := sum_(z in X) f(x, z) g(z, y)`
`= sum_(x le z le y) f(x, z) g(z, y)`.
当 `x le y` 不成立时, 上式右端为空和, 其等于零, 因此 `f ast g in cc F(X)`.
`cc F(X)` 的代数结构 `cc F(X)` 关于卷积运算构成含幺半群, 单位元是 `delta(x, y)`. 如果考虑函数自然的加法, 则 `cc F(X)` 成一环.
现考虑 `cc F(X)` 的单位群, 即全体乘法可逆元构成的群.
`f in cc F(X)` 可逆当且仅当 `AA x in X`, `f(x, x) != 0`. `f` 可逆时, 它的逆可以用下面的递归式计算: `g(x, y) := {f(y, y)^-1, if x = y; -f(y, y)^-1 sum_(x le z lt y) g(x, z) f(z, y), otherwise:}`
全序集的 Möbius 函数 设 `(X, le)` 是全序集, 其中 `X = {x_1, cdots, x_n}`, 且 `x_1 lt cdots lt x_n`. 由递归式 `mu(x_i, x_j) = { 1, if i = j; -sum_(k=i)^(j-1) mu(x_i, x_k), otherwise :}` 于是 `mu(x_i, x_j) = { 1, if j = i; -1, if j = i+1; 0, otherwise :}`
直积的 Möbius 函数 两个偏序集 `(X, le_X)`, `(Y, le_Y)` 的直积是偏序集 `(X xx Y, le)`, 其中 `(x_1, y_1) le (x_2, y_2)` `iff x_1 le_X x_2 and y_1 le_Y y_2`. 我们有: `mu((x_1, y_1), (x_2, y_2)) = mu_1(x_1, x_2) mu_2(y_1, y_2)`.
经典 Möbius 反演 正整数 `n` 的全体正因子按整除关系构成有限偏序集, 经典 Möbius 反演公式为 `g(n) = sum_(d | n) f(d)` `iff f(n) = sum_(d | n) mu(d, n) g(d)`. 下面具体计算 `mu(d, n)`.
二项式反演 在子集反演公式中, 若 `f, g` 的值只与集合大小有关, 而与具体集合的选择无关, 则得到: `g(n) = sum_(k=0)^n (n;k) f(k)` `iff f(n) = sum_(k=0)^n (-1)^(n-k) (n;k) g(k)`.
Möbius 变换 在子集反演公式中, 称 `g(X) = sum_(Y sube X) f(Y)` 为 `f` 的 Möbius 变换, `f` 为 `g` 的 Möbius 逆变换. 记作 `g = hat f`. 又定义集合卷积 `(f ast_uu g)(X) := sum_(A uu B = X) f(A) g(B)`. 则有公式 `widehat(f ast_uu g) = hat f hat g`. 此公式可类比于 `RR^n` 上函数的 Fourier 变换.
记 `h = f ast_uu g`, 直接计算
`hat h(X)`
`= sum_(Y sube X) h(Y)`
`= sum_(Y sube X) sum_(A uu B = Y) f(A) g(B)`
`= sum_(A sube X) sum_(B sube X) f(A) g(B)`
`= {:hat f:}(X) {:hat g:}(X)`.