第六章 - 高级计数技术
求解线性递推关系
求解常系数线性齐次递推关系
一个常系数的 k k k 阶线性齐次递推关系 (linear homogeneous recurrence relation) 是形如 a n = c a a n − 1 + c 2 a n − 2 + ⋯ + c k a n − k a_{n} = c_{a} a_{n - 1} + c_{2} a_{n - 2} + \cdots + c_{k} a_{n - k} a n = c a a n − 1 + c 2 a n − 2 + ⋯ + c k a n − k 的递推关系,其中 c 1 , c 2 , ⋯ , c k c_{1}, c_{2}, \cdots, c_{k} c 1 , c 2 , ⋯ , c k 是实数,c k ≠ 0 c_{k} \neq 0 c k = 0 。
这个定义中的递推关系是线性的,因为右式是序列前项的倍数之和;这个递推关系是齐次的,因为所处选的各项都是 a j a_{j} a j 的倍数;序列各项的系数都是常数而不是依赖于 n n n 的函数。
在正式求解之前,我们先给出如下定义。我们按照 a n = r n a_{n} = r^{n} a n = r n 的形式代入递推式,得到方程 r n = c 1 r n − 1 + c 2 r n − 2 + ⋯ + c k r n − k r^{n} = c_{1} r^{n - 1} + c_{2} r^{n - 2} + \cdots + c_{k} r^{n - k} r n = c 1 r n − 1 + c 2 r n − 2 + ⋯ + c k r n − k ,这个方程称作递推关系的特征方程 (characteristic equation),方程的解称作递推关系的特征根 (characteristic root)。
现在,我们先考虑二阶线性齐次递推关系。
对于递推关系 a n = c 1 a n − 1 + c 2 a n − 2 a_{n} = c_{1} a_{n - 1} + c_{2} a_{n - 2} a n = c 1 a n − 1 + c 2 a n − 2 ,设方程 r 2 = c 1 r + c 2 r^{2} = c_{1} r + c_{2} r 2 = c 1 r + c 2 的两个根为 r 1 r_{1} r 1 和 r 2 r_{2} r 2 。若 r 1 ≠ r 2 r_{1} \neq r_{2} r 1 = r 2 ,则 a n = α 1 r 1 n + α 2 r 2 n a_{n} = \alpha_{1} r_{1}^{n} + \alpha_{2} r_{2}^{n} a n = α 1 r 1 n + α 2 r 2 n ;若 r 1 = r 2 = r 0 r_{1} = r_{2} = r_{0} r 1 = r 2 = r 0 ,则 a n = α 1 r 0 n + α 2 n r 0 n a_{n} = \alpha_{1} r_{0}^{n} + \alpha_{2} n r_{0}^{n} a n = α 1 r 0 n + α 2 n r 0 n 。其中 α 1 \alpha_{1} α 1 和 α 2 \alpha_{2} α 2 可以根据初始条件解出。
这一定理的证明请读者参阅组合数学相关教科书或网络资料。
进一步地,我们考察更高阶的,也就是一般的情况。
若特征方程 r k = c 1 r k − 1 + ⋯ c k r^{k} = c_{1} r^{k - 1} + \cdots c_{k} r k = c 1 r k − 1 + ⋯ c k 有 k k k 个不相等的根 r 1 , r 2 , ⋯ r k r_{1}, r_{2}, \cdots r_{k} r 1 , r 2 , ⋯ r k ,则 a n = α 1 r 1 n + α 2 r 2 n + ⋯ α k r k n a_{n} = \alpha_{1} r_{1}^{n} + \alpha_{2} r_{2}^{n} + \cdots \alpha_{k} r_{k}^{n} a n = α 1 r 1 n + α 2 r 2 n + ⋯ α k r k n 是递推关系 a n = c 1 a n − 1 + ⋯ c k a n − k a_{n} = c_{1} a_{n - 1} + \cdots c_{k} a_{n - k} a n = c 1 a n − 1 + ⋯ c k a n − k 的解。其中 α 1 , α 2 , ⋯ α k \alpha_{1}, \alpha_{2}, \cdots \alpha_{k} α 1 , α 2 , ⋯ α k 可以根据初始条件解出。
除此之外,我们还需要了解存在重根的情况。
若特征方程 r k = c 1 r k − 1 + ⋯ c k r^{k} = c_{1} r^{k - 1} + \cdots c_{k} r k = c 1 r k − 1 + ⋯ c k 有 t t t 个不相等的根 r 1 , r 2 , ⋯ r t r_{1}, r_{2}, \cdots r_{t} r 1 , r 2 , ⋯ r t ,其重数分别为 m 1 , m 2 , ⋯ , m t m_{1}, m_{2}, \cdots, m_{t} m 1 , m 2 , ⋯ , m t 满足 m i ≥ 1 , ∑ i m i = k m_{i} \geq 1, \sum_{i} m_{i} = k m i ≥ 1 , ∑ i m i = k ,则
a n = ( α 1 , 0 + α 1 , 1 n + ⋯ + α 1 , m 1 − 1 n m 1 − 1 ) r 1 n + ( α 2 , 0 + α 2 , 1 n + ⋯ + α 2 , m 2 − 1 n m 2 − 1 ) r 2 n + ⋯ + ( α t , 0 + α t , 1 n + ⋯ + α t , m t − 1 n m t − 1 ) r t n \begin{aligned}
a_{n} = & (\alpha_{1, 0} + \alpha_{1, 1} n + \cdots + \alpha_{1, m_{1} - 1} n^{m_{1} - 1}) r_{1}^{n} \\
& + (\alpha_{2, 0} + \alpha_{2, 1} n + \cdots + \alpha_{2, m_{2} - 1} n^{m_{2} - 1}) r_{2}^{n} \\
& + \cdots \\
& + (\alpha_{t, 0} + \alpha_{t, 1} n + \cdots + \alpha_{t, m_{t} - 1} n^{m_{t} - 1}) r_{t}^{n}
\end{aligned}
a n = ( α 1 , 0 + α 1 , 1 n + ⋯ + α 1 , m 1 − 1 n m 1 − 1 ) r 1 n + ( α 2 , 0 + α 2 , 1 n + ⋯ + α 2 , m 2 − 1 n m 2 − 1 ) r 2 n + ⋯ + ( α t , 0 + α t , 1 n + ⋯ + α t , m t − 1 n m t − 1 ) r t n
是递推关系 a n = c 1 a n − 1 + ⋯ c k a n − k a_{n} = c_{1} a_{n - 1} + \cdots c_{k} a_{n - k} a n = c 1 a n − 1 + ⋯ c k a n − k 的解。其中 α i , j \alpha_{i, j} α i , j 可以根据初始条件解出。
求解常系数线性非齐次递推关系
形如 a n = c a a n − 1 + c 2 a n − 2 + ⋯ + c k a n − k + F ( n ) a_{n} = c_{a} a_{n - 1} + c_{2} a_{n - 2} + \cdots + c_{k} a_{n - k} + F(n) a n = c a a n − 1 + c 2 a n − 2 + ⋯ + c k a n − k + F ( n ) 的递推关系是常系数线性非齐次递推关系 (linear nonhomogeneous recurrence relation)。对应的 a n = c a a n − 1 + c 2 a n − 2 + ⋯ + c k a n − k a_{n} = c_{a} a_{n - 1} + c_{2} a_{n - 2} + \cdots + c_{k} a_{n - k} a n = c a a n − 1 + c 2 a n − 2 + ⋯ + c k a n − k 是「相伴的」齐次递推关系,其在求解非齐次递推关系中发挥了重要作用。
关于常系数线性非齐次递推关系的一个关键事实在于,每个解都是一个特解与相伴的线性齐次递推关系的一个解的和。形式化的定理如下:
如果 { a n ( p ) } \{ a_{n}^{(p)} \} { a n ( p ) } 是常系数线性非齐次递推关系 a n = c a a n − 1 + c 2 a n − 2 + ⋯ + c k a n − k + F ( n ) a_{n} = c_{a} a_{n - 1} + c_{2} a_{n - 2} + \cdots + c_{k} a_{n - k} + F(n) a n = c a a n − 1 + c 2 a n − 2 + ⋯ + c k a n − k + F ( n ) 的一个特解,而 { a n ( h ) } \{ a_{n}^{(h)} \} { a n ( h ) } 是相伴的齐次递推关系的一个解,则原非齐次递推关系的每个解都是 { a n ( p ) + a n ( h ) } \{ a_{n}^{(p)} + a_{n}^{(h)} \} { a n ( p ) + a n ( h ) } 的形式。
更进一步地,如果我们能够确定 F ( n ) F(n) F ( n ) 的形式,那么我们可以给出一个更具体的解。
对于线性非齐次递推关系 a n = c a a n − 1 + c 2 a n − 2 + ⋯ + c k a n − k + F ( n ) a_{n} = c_{a} a_{n - 1} + c_{2} a_{n - 2} + \cdots + c_{k} a_{n - k} + F(n) a n = c a a n − 1 + c 2 a n − 2 + ⋯ + c k a n − k + F ( n ) ,其中 F ( n ) = ( b t n t + b t − 1 n t − 1 + ⋯ + b 1 n + b 0 ) s n F(n) = (b_{t} n^{t} + b_{t - 1} n^{t - 1} + \cdots + b_{1} n + b_{0}) s^{n} F ( n ) = ( b t n t + b t − 1 n t − 1 + ⋯ + b 1 n + b 0 ) s n 。当 s s s 不是相伴的线性齐次递推关系的特征方程的根时,存在一个形式为 ( p t n t + p t − 1 n t − 1 + ⋯ + p 1 n + p 0 ) s n (p_{t} n^{t} + p_{t - 1} n^{t - 1} + \cdots + p_{1} n + p_{0}) s^{n} ( p t n t + p t − 1 n t − 1 + ⋯ + p 1 n + p 0 ) s n 的特解;当 s s s 是相伴的线性齐次递推关系的特征方程的 m m m 重根时,存在一个形式为 n m ( p t n t + p t − 1 n t − 1 + ⋯ + p 1 n + p 0 ) s n n^{m} (p_{t} n^{t} + p_{t - 1} n^{t - 1} + \cdots + p_{1} n + p_{0}) s^{n} n m ( p t n t + p t − 1 n t − 1 + ⋯ + p 1 n + p 0 ) s n 的特解。
分治递推关系
假设一个递归算法把一个规模为 n n n 的问题分成 a a a 个子问题,其中每个子问题的规模是 n b \frac{n}{b} b n 。将每个子问题的解组合成原来问题的解的算法需要总量为 g ( n ) g(n) g ( n ) 的额外运算。则求解规模为 n n n 的问题所需的运算数的总量 f ( n ) f(n) f ( n ) 满足递推关系 f ( n ) = a f ( n b ) + g ( n ) f(n) = a f(\frac{n}{b}) + g(n) f ( n ) = a f ( b n ) + g ( n ) 。这样的关系称作分治递推关系 (divide-and-conquer recurrence relation)。
我们直接给出一类 g ( n ) = c b d k g(n) = c b^{dk} g ( n ) = c b d k 时 f ( n ) f(n) f ( n ) 的阶。这个定理非常重要,被称作主定理 (master theorem)。
设 f f f 满足递推关系 f ( n ) = a f ( n b ) + c n d f(n) = a f(\frac{n}{b}) + c n^{d} f ( n ) = a f ( b n ) + c n d ,其中 n = b k n = b^{k} n = b k ,则
f ( n ) = { O ( n d ) , a < b d O ( n d log n ) , a = b d O ( n log b a ) , a > b d f(n) = \begin{cases}
O(n^{d}), & a < b^{d} \\
O(n^{d} \log n), & a = b^{d} \\
O(n^{\log_{b} a}), & a > b^{d}
\end{cases}
f ( n ) = ⎩ ⎨ ⎧ O ( n d ) , O ( n d log n ) , O ( n l o g b a ) , a < b d a = b d a > b d
生成函数
定义
数列 a 0 , a 1 , ⋯ , a k , ⋯ a_{0}, a_{1}, \cdots, a_{k}, \cdots a 0 , a 1 , ⋯ , a k , ⋯ 的生成函数 (generating function) 是无穷级数 G ( x ) = a 0 + a 1 x + ⋯ + a k x k + ⋯ = ∑ k = 0 ∞ a k x k G(x) = a_{0} + a_{1} x + \cdots + a_{k} x^{k} + \cdots = \sum_{k = 0}^{\infty} a_{k} x^{k} G ( x ) = a 0 + a 1 x + ⋯ + a k x k + ⋯ = ∑ k = 0 ∞ a k x k 。
特别地,这样的生成函数称作普通生成函数。因为事实上还存在其他形式的生成函数。
另一种常用的生成函数是指数生成函数,即为无穷级数 G ^ ( x ) = a 0 + a 1 x 1 ! + a 2 x 2 2 ! + a 3 x 3 3 ! + ⋯ = ∑ k = 0 ∞ a k x k k ! \hat{G}(x) = a_{0} + a_{1} \frac{x}{1!} + a_{2} \frac{x^{2}}{2!} + a_{3} \frac{x^{3}}{3!} + \cdots = \sum_{k = 0}^{\infty} a_{k} \frac{x^{k}}{k!} G ^ ( x ) = a 0 + a 1 1 ! x + a 2 2 ! x 2 + a 3 3 ! x 3 + ⋯ = ∑ k = 0 ∞ a k k ! x k
通过之后的讨论,我们可以发现指数生成函数常用于基于 e x e^{x} e x 变形得到的生成函数。
同时,为了后续的数学表示简便,我们还定义广义二项式系数。对于实数 u u u 和非负整数 k k k ,广义二项式系数
( u k ) = { u ( u − 1 ) ⋯ ( u − k + 1 ) k ! , k > 0 1 , k = 0 {u \choose k} = \begin{cases}
\frac{u (u - 1) \cdots (u - k + 1)}{k!}, & k > 0 \\
1, & k = 0
\end{cases}
( k u ) = { k ! u ( u − 1 ) ⋯ ( u − k + 1 ) , 1 , k > 0 k = 0
据此,我们可以得到广义二项式定理。
设 ∣ x ∣ < 1 |x| < 1 ∣ x ∣ < 1 ,则 ( 1 + x ) u = ∑ k = 0 ∞ ( u k ) x k (1 + x)^{u} = \sum_{k = 0}^{\infty} {u \choose k} x^{k} ( 1 + x ) u = ∑ k = 0 ∞ ( k u ) x k 。
性质
当用生成函数求解计数问题时,通常将它们视作形式幂级数,即不考察其收敛性,而只将其当作运算对象。
我们首先需要了解两个生成函数是怎样相加和相乘的,事实上处理方法和幂级数是一致的。令 f ( x ) = ∑ k = 0 ∞ a k x k , g ( x ) = ∑ k = 0 ∞ b k x k f(x) = \sum_{k = 0}^{\infty} a_{k} x^{k}, g(x) = \sum_{k = 0}^{\infty} b_{k} x^{k} f ( x ) = ∑ k = 0 ∞ a k x k , g ( x ) = ∑ k = 0 ∞ b k x k ,则 f ( x ) + g ( x ) = ∑ k = 0 ∞ ( a k + b k ) x k , f ( x ) g ( x ) = ∑ k = 0 ∞ ( ∑ j = 0 k a j b k − j ) x k f(x) + g(x) = \sum_{k = 0}^{\infty} (a_{k} + b_{k}) x^{k}, f(x) g(x) = \sum_{k = 0}^{\infty} (\sum_{j = 0}^{k} a_{j} b_{k - j}) x^{k} f ( x ) + g ( x ) = ∑ k = 0 ∞ ( a k + b k ) x k , f ( x ) g ( x ) = ∑ k = 0 ∞ ( ∑ j = 0 k a j b k − j ) x k 。
我们给出如下常用的生成函数。
计数问题与生成函数
生成函数可以用于求解各种计数问题。
我们先来看一类问题,求 e 1 + e 2 + ⋯ + e n = C e_{1} + e_{2} + \cdots + e_{n} = C e 1 + e 2 + ⋯ + e n = C 的解,其中 e i e_{i} e i 为有受到约束的非负整数,C C C 为常数。我们用下面这个例子来展示生成函数的使用方法。
求 e 1 + e 2 + e 3 = 17 e_{1} + e_{2} + e_{3} = 17 e 1 + e 2 + e 3 = 17 的解的个数,其中 e 1 . e 2 , e 3 e_{1}. e_{2}, e_{3} e 1 . e 2 , e 3 为非负整数,且满足 2 ≤ e 1 ≤ 5 , 3 ≤ e 2 ≤ 6 , 4 ≤ e 3 ≤ 7 2 \leq e_{1} \leq 5, 3 \leq e_{2} \leq 6, 4 \leq e_{3} \leq 7 2 ≤ e 1 ≤ 5 , 3 ≤ e 2 ≤ 6 , 4 ≤ e 3 ≤ 7 。
考察生成函数 ( x 2 + x 3 + x 4 + x 5 ) ( x 3 + x 4 + x 5 + x 6 ) ( x 4 + x 5 + x 6 + x 7 ) (x^{2} + x^{3} + x^{4} + x^{5})(x^{3} + x^{4} + x^{5} + x^{6})(x^{4} + x^{5} + x^{6} + x^{7}) ( x 2 + x 3 + x 4 + x 5 ) ( x 3 + x 4 + x 5 + x 6 ) ( x 4 + x 5 + x 6 + x 7 ) ,则原题的答案即为该生成函数中 x 17 x^{17} x 17 这一项的系数。
进一步地,我们使用生成函数解决这类问题中的一个典型问题,求出从 n n n 类不同物体中选择 r r r 个物体,且每类物体至少选 1 1 1 个的方式数。
记 a r a_{r} a r 为从 n n n 类不同物体中选择 r r r 个物体,且每类物体至少选 1 1 1 个的方式数。因为每类物体至少需要选 1 1 1 个,因此这 n n n 个类中每类物体都对序列 { a r } \{ a_{r} \} { a r } 的生成函数 G ( x ) G(x) G ( x ) 贡献了因子 ( x + x 2 + x 3 + ⋯ ) (x + x^{2} + x^{3} + \cdots) ( x + x 2 + x 3 + ⋯ ) 。故有生成函数
G ( x ) = ( x + x 2 + x 3 + ⋯ ) n = x n ( 1 + x + x 2 + ⋯ ) n = x n ( 1 − x ) n G(x) = (x + x^{2} + x^{3} + \cdots)^{n} = x^{n} (1 + x + x^{2} + \cdots)^{n} = \frac{x^{n}}{(1 - x)^{n}} G ( x ) = ( x + x 2 + x 3 + ⋯ ) n = x n ( 1 + x + x 2 + ⋯ ) n = ( 1 − x ) n x n
利用广义二项式定理进一步变形:
G ( x ) = x n ( 1 − x ) n = x n ( 1 − x ) − n = x n ∑ r = 0 ∞ ( − n r ) ( − x ) r = x n ∑ r = 0 ∞ ( − 1 ) r C ( n + r − 1 , r ) ( − 1 ) r x r = ∑ r = 0 ∞ C ( n + r − 1 , r ) x r = ∑ r = n ∞ C ( r − 1 , r − n ) x r \begin{aligned}
G(x) & = \frac{x^{n}}{(1 - x)^{n}} \\
& = x^{n} (1 - x)^{-n} \\
& = x^{n} \sum_{r = 0}^{\infty} {{-n} \choose {r}} (-x)^{r} \\
& = x^{n} \sum_{r = 0}^{\infty} (-1)^{r} C(n + r - 1, r) (-1)^{r} x^{r} \\
& = \sum_{r = 0}^{\infty} C(n + r - 1, r) x^{r} \\
& = \sum_{r = n}^{\infty} C(r - 1, r - n) x^{r}
\end{aligned} G ( x ) = ( 1 − x ) n x n = x n ( 1 − x ) − n = x n r = 0 ∑ ∞ ( r − n ) ( − x ) r = x n r = 0 ∑ ∞ ( − 1 ) r C ( n + r − 1 , r ) ( − 1 ) r x r = r = 0 ∑ ∞ C ( n + r − 1 , r ) x r = r = n ∑ ∞ C ( r − 1 , r − n ) x r
故方法数即为 C ( r − 1 , r − n ) C(r - 1, r - n) C ( r − 1 , r − n ) 。
使用生成函数求解递推关系
使用生成函数求解递推关系的一般步骤是:
以幂级数形式设出生成函数
利用递推关系得到生成函数的封闭形式
根据常用生成函数得到封闭形式函数对应的数列
这样的表述是十分概括而抽象的。我们用下面这个例子加以说明:
求解递推关系 a 0 = 2 , a k = 3 a k − 1 a_{0} = 2, a_{k} = 3 a_{k - 1} a 0 = 2 , a k = 3 a k − 1 。
设 G ( x ) G(x) G ( x ) 是 { a n } \{ a_{n} \} { a n } 的生成函数,即 G ( x ) = ∑ k = 0 ∞ a k x k G(x) = \sum_{k = 0}^{\infty} a_{k} x_{k} G ( x ) = ∑ k = 0 ∞ a k x k 。
则根据递推关系,有 G ( x ) − 3 x G ( x ) = a 0 = ∑ k = 1 ∞ ( a k − 3 a k − 1 ) x k = 2 G(x) - 3x G(x) = a_{0} = \sum_{k = 1}^{\infty} (a_{k} - 3a_{k - 1}) x^{k} = 2 G ( x ) − 3 x G ( x ) = a 0 = ∑ k = 1 ∞ ( a k − 3 a k − 1 ) x k = 2 ,于是变形得到 G ( x ) G(x) G ( x ) 的封闭形式 G ( x ) = 2 1 − 3 x G(x) = \frac{2}{1 - 3x} G ( x ) = 1 − 3 x 2 。
与常用生成函数 1 1 − a x = ∑ k = 0 ∞ a k x k \frac{1}{1 - ax} = \sum_{k = 0}^{\infty} a^{k} x^{k} 1 − a x 1 = ∑ k = 0 ∞ a k x k 比较,得到 G ( x ) = ∑ k = 0 ∞ 2 ⋅ 3 k x k G(x) = \sum_{k = 0}^{\infty} 2 \cdot 3^{k} x^{k} G ( x ) = ∑ k = 0 ∞ 2 ⋅ 3 k x k 。故 a k = 2 ⋅ 3 k a_{k} = 2 \cdot 3^{k} a k = 2 ⋅ 3 k 。
容斥
在第五章中,我们已经介绍过容斥原理的简单形式 。接下来我们将讨论更一般情况下的容斥原理。
容斥原理
设 A 1 , A 2 , ⋯ , A n A_{1}, A_{2}, \cdots, A_{n} A 1 , A 2 , ⋯ , A n 是有穷集,则
∣ A 1 ∪ A 2 ∪ ⋯ ∪ A n ∣ = ∑ 1 ≤ i ≤ n ∣ A i ∣ − ∑ 1 ≤ i < j ≤ n ∣ A i ∩ A j ∣ + ∑ 1 ≤ i < j < k ≤ n ∣ A i ∩ A j ∩ A k ∣ − ⋯ + ( − 1 ) n + 1 ∣ A 1 ∩ A 2 ∩ ⋯ ∩ A n ∣ \begin{aligned}
|A_{1} \cup A_{2} \cup \cdots \cup A_{n}| = & \sum_{1 \leq i \leq n} |A_{i}| - \sum_{1 \leq i < j \leq n} |A_{i} \cap A_{j}| \\
& + \sum_{1 \leq i < j < k \leq n} |A_{i} \cap A_{j} \cap A_{k}| - \cdots \\
& + (-1)^{n + 1} |A_{1} \cap A_{2} \cap \cdots \cap A_{n}|
\end{aligned} ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A n ∣ = 1 ≤ i ≤ n ∑ ∣ A i ∣ − 1 ≤ i < j ≤ n ∑ ∣ A i ∩ A j ∣ + 1 ≤ i < j < k ≤ n ∑ ∣ A i ∩ A j ∩ A k ∣ − ⋯ + ( − 1 ) n + 1 ∣ A 1 ∩ A 2 ∩ ⋯ ∩ A n ∣
这里有必要提及一下容斥原理的证明。
Proof
我们考察左式中每个元素在右式中被计数的次数。
设 a ∈ ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A n ∣ a \in |A_{1} \cup A_{2} \cup \cdots \cup A_{n}| a ∈ ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A n ∣ ,假设其恰好为 A 1 , A 2 , ⋯ , A n A_{1}, A_{2}, \cdots, A_{n} A 1 , A 2 , ⋯ , A n 中 r r r 个集合的元素。则 a a a 被右式中第一项 ∑ 1 ≤ i ≤ n ∣ A i ∣ \sum_{1 \leq i \leq n} |A_{i}| ∑ 1 ≤ i ≤ n ∣ A i ∣ 计数了 C ( r , 1 ) C(r, 1) C ( r , 1 ) 次,被第二项 − ∑ 1 ≤ i < j ≤ n ∣ A i ∩ A j ∣ -\sum_{1 \leq i < j \leq n} |A_{i} \cap A_{j}| − ∑ 1 ≤ i < j ≤ n ∣ A i ∩ A j ∣ 计数了 C ( r , 2 ) C(r, 2) C ( r , 2 ) 次。以此类推,其在右式中最终被计数的次数为 C ( r , 1 ) − C ( r , 2 ) + ⋯ + ( − 1 ) r + 1 C ( r , r ) C(r, 1) - C(r, 2) + \cdots + (-1)^{r + 1} C(r, r) C ( r , 1 ) − C ( r , 2 ) + ⋯ + ( − 1 ) r + 1 C ( r , r ) 。
根据组合数的恒等式 C ( r , 0 ) − C ( r , 1 ) + C ( r , 2 ) − ⋯ + ( − 1 ) r C ( r , r ) = 0 C(r, 0) - C(r, 1) + C(r, 2) - \cdots + (-1)^{r} C(r, r) = 0 C ( r , 0 ) − C ( r , 1 ) + C ( r , 2 ) − ⋯ + ( − 1 ) r C ( r , r ) = 0 ,得到上式 C ( r , 1 ) − C ( r , 2 ) + ⋯ + ( − 1 ) r + 1 C ( r , r ) = C ( r , 0 ) = 1 C(r, 1) - C(r, 2) + \cdots + (-1)^{r + 1} C(r, r) = C(r, 0) = 1 C ( r , 1 ) − C ( r , 2 ) + ⋯ + ( − 1 ) r + 1 C ( r , r ) = C ( r , 0 ) = 1 。
因此,左式中每个元素恰好在右式中被计数 1 1 1 次。即证。
容斥原理的另一种形式
设 A i A_{i} A i 是具有性质 P i P_{i} P i 的元素的子集。同时具有性质 P i 1 , P i 2 , ⋯ , P i k P_{i_{1}}, P_{i_{2}}, \cdots, P_{i_{k}} P i 1 , P i 2 , ⋯ , P i k 的元素数记为 N ( P i 1 P i 2 ⋯ P i k ) N(P_{i_{1}} P_{i_{2}} \cdots P_{i_{k}}) N ( P i 1 P i 2 ⋯ P i k ) ,即 ∣ A i 1 ∩ A i 2 ∩ ⋯ ∩ A i k ∣ = N ( P i 1 P i 2 ⋯ P i k ) |A_{i_{1}} \cap A_{i_{2}} \cap \cdots \cap A_{i_{k}}| = N(P_{i_{1}} P_{i_{2}} \cdots P_{i_{k}}) ∣ A i 1 ∩ A i 2 ∩ ⋯ ∩ A i k ∣ = N ( P i 1 P i 2 ⋯ P i k ) 。
同时不具有性质 P i 1 , P i 2 , ⋯ , P i k P_{i_{1}}, P_{i_{2}}, \cdots, P_{i_{k}} P i 1 , P i 2 , ⋯ , P i k 的元素数记为 N ( P i 1 ′ P i 2 ′ ⋯ P i k ′ ) N(P_{i_{1}}' P_{i_{2}}' \cdots P_{i_{k}}') N ( P i 1 ′ P i 2 ′ ⋯ P i k ′ ) ,全集中的元素数记为 N N N ,则
N ( P 1 ′ P 2 ′ ⋯ P n ′ ) = N − ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A n ∣ = N − ∑ 1 ≤ i ≤ n N ( P i ) + ∑ 1 ≤ i < j ≤ n N ( P i P j ) − ⋯ + ( − 1 ) n N ( P 1 P 2 ⋯ P n ) \begin{aligned}
N(P_{1}' P_{2}' \cdots P_{n}') & = N - |A_{1} \cup A_{2} \cup \cdots \cup A_{n}| \\
& = N - \sum_{1 \leq i \leq n} N(P_{i}) + \sum_{1 \leq i < j \leq n} N(P_{i} P_{j}) - \cdots + (-1)^{n} N(P_{1} P_{2} \cdots P_{n})
\end{aligned} N ( P 1 ′ P 2 ′ ⋯ P n ′ ) = N − ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A n ∣ = N − 1 ≤ i ≤ n ∑ N ( P i ) + 1 ≤ i < j ≤ n ∑ N ( P i P j ) − ⋯ + ( − 1 ) n N ( P 1 P 2 ⋯ P n )
映上函数的个数
这里我们需要讨论利用容斥原理解决的两类具体问题。第一类为求映上函数的个数,即两个集合间能建立多少种可能的满射。
考虑一个 m m m 元素集合到 n n n 元素集合的满射,其中 m ≥ n m \geq n m ≥ n ,则可能的满射数为
n m − C ( n , 1 ) ( n − 1 ) m + C ( n , 2 ) ( n − 2 ) m − ⋯ + ( − 1 ) n − 1 C ( n , n − 1 ) 1 m n^{m} - C(n, 1)(n - 1)^{m} + C(n, 2)(n - 2)^{m} - \cdots + (-1)^{n - 1} C(n, n - 1) 1^{m} n m − C ( n , 1 ) ( n − 1 ) m + C ( n , 2 ) ( n − 2 ) m − ⋯ + ( − 1 ) n − 1 C ( n , n − 1 ) 1 m
再从另一个角度思考,从 m m m 元素集合到 n n n 元素集合的满射等价于:讲定义域中的 m m m 个元素分配到 n n n 个不可区别的盒子中,并保证每个盒子都不是空的。故根据我们在第五章对这类问题的讨论 ,我们所求的满射数即为第二类斯特林数 S ( m , n ) S(m, n) S ( m , n ) 再乘上 n n n 个元素的集合的排列数,故最终答案也可以表示为 n ! S ( m , n ) n! S(m, n) n ! S ( m , n ) 。
错位排列
另一类经典的问题被称作错位排列 (derangement) 问题,即求 n n n 个元素没有一个在初始位置上的排列方案数。
这个问题的答案被称作错位排列数,记作 D n D_{n} D n ,具体为
D n = n ! [ 1 − 1 1 ! + 1 2 ! − 1 3 ! + ⋯ + ( − 1 ) n 1 n ! ] D_{n} = n! \left[ 1 - \frac{1}{1!} + \frac{1}{2!} - \frac{1}{3!} + \cdots + (-1)^{n} \frac{1}{n!} \right] D n = n ! [ 1 − 1 ! 1 + 2 ! 1 − 3 ! 1 + ⋯ + ( − 1 ) n n ! 1 ]