Chap 6 Counting
核心知识
基本计数方法:积、和、减 ( 容斥原理 ) 、除
鸽巢原理 :推广形式,关注例题
排列、组合
基本版本
可重版本
几类问题
不可区分物体的排列
可区分 / 不可区分的物体放入可区分 / 不可区分的箱子里(共 4 种情况)
二项式定理
The Basics of Counting
Basic Counting Principles
乘积法则 (THE PRODUCT RULE) :假设一个流程可以被分成两个阶段,如果有 n 1 n_1 n 1 种方法完成第一个阶段,且对于完成第一个阶段的每一种方法,有 n 2 n_2 n 2 种对应的方法完成第二个阶段,那么就有 n 1 n 2 n_1n_2 n 1 n 2 种方法完成整个流程。
拓展版本:假设一个流程可以被分成一系列阶段 T 1 , T 2 , … , T m T_1, T_2, \dots, T_m T 1 , T 2 , … , T m 。如果每个阶段 T i , i = 1 , 2 , … , m T_i, i = 1, 2, \dots, m T i , i = 1 , 2 , … , m 有 n i n_i n i 种方法完成(不论前面的任务是怎么完成的) ,那么就有 n 1 n 2 … n m n_1n_2 \dots n_m n 1 n 2 … n m 种方法完成整个流程。
和法则 (THE SUM RULE) :如果一个任务既要被包含 n 1 n_1 n 1 步的方法完成,也要被包含 n 2 n_2 n 2 步的方法完成,且 n 1 n_1 n 1 步形成的集合与 n 2 n_2 n 2 步形成的集合不相交,则总共需要 n 1 + n 2 n_1 + n_2 n 1 + n 2 步来完成该任务。
拓展版本:假设一个任务要被包含 n 1 n_1 n 1 步的方法、包含 n 2 n_2 n 2 步的方法……包含 n m n_m n m 的方法完成,且这些步骤形成的集合两两不相交,那么完成这个任务的总步数为 n 1 + n 2 + ⋯ + n m n_1 + n_2 + \dots + n_m n 1 + n 2 + ⋯ + n m 。
因此,对于两两互不相交的集合,我们可以得到以下公式:
∣ A 1 ∪ A 2 ∪ ⋯ ∪ A m ∣ = ∣ A 1 ∣ + ∣ A 2 ∣ + ⋯ + ∣ A m ∣ when A i ∩ A j = ∅ for all i , j
|A_1 \cup A_2 \cup \dots \cup A_m| = |A_1| + |A_2| + \dots + |A_m| \text{ when } A_i \cap A_j = \emptyset \text{ for all } i, j
∣ A 1 ∪ A 2 ∪ ⋯ ∪ A m ∣ = ∣ A 1 ∣ + ∣ A 2 ∣ + ⋯ + ∣ A m ∣ when A i ∩ A j = ∅ for all i , j
More Complex Counting Problems
例题
The Subtraction Rule (Inclusion-Exclusion for Two Sets)
减法法则 (THE SUBTRACTION RULE) :如果一个任务既要 n 1 n_1 n 1 步完成,也要 n 2 n_2 n 2 步完成,则完成任务的总步数为:n 1 + n 2 − n_1 + n_2 - n 1 + n 2 − 这 2 个不同方法包含的相同步骤数。
减法法则又被称为容斥原理 (principinclusion-exclusion)
∣ A 1 ∪ A 2 ∣ = ∣ A 1 ∣ + ∣ A 2 ∣ − ∣ A 1 ∩ A 2 ∣ |A_1 \cup A_2| = |A_1| + |A_2| - |A_1 \cap A_2| ∣ A 1 ∪ A 2 ∣ = ∣ A 1 ∣ + ∣ A 2 ∣ − ∣ A 1 ∩ A 2 ∣
🌰
The Division Rule
除法法则 (THE DIVISION RULE) :如果一个任务有 n n n 种方法完成,那么对于每种方法 w w w ,有且仅有 d d d 种方法与 w w w 等价,因此完成该任务共需 n d \dfrac{n}{d} d n 步
注:这里表述有些问题,可能会误导读者,推荐理解下面的表述
另外形式的表述 ( 容易理解一点😊):
集合版本:如果一个有限集合 A A A 是由 n n n 个两两不相交的子集构成的并集,且每个子集有 d d d 个元素,那么 n = ∣ A ∣ d n = \dfrac{|A|}{d} n = d ∣ A ∣
函数版本:如果 f : A → B f: A \rightarrow B f : A → B ,A , B A, B A , B 均为有限集合,且 ∀ y ∈ B \forall y \in B ∀ y ∈ B ,有且仅有 d d d 个 x ∈ A x \in A x ∈ A ,使得 f ( x ) = y f(x) = y f ( x ) = y ,那么 ∣ B ∣ = ∣ A ∣ d |B| = \dfrac{|A|}{d} ∣ B ∣ = d ∣ A ∣
🌰
Tree Diagrams
我们可以使用树状图 (tree diagram) 解决简单的计数问题:
用分支 表示每种可能的选择
用叶子 表示每种可能的结果
我的理解:其实就是枚举法,只能用于数据规模较小的情况
例题
The Pigeonhole Principle
定理 1 ——鸽巢原理 (THE PIGEONHOLE PRINCIPLE) :如果 k k k 为正整数,有 k + 1 k+1 k + 1 个或更多的物体放入 k k k 个箱子中,那么至少存在一个箱子包含 2 个或多个物体。
鸽巢原理又被称为狄利克雷抽屉原理 (Dirchlet drawer principle)
推论 1 :一个从具有 k + 1 k+1 k + 1 或更多元素的集合映射到具有 k k k 个元素的集合的函数不是 单射 的
🌰
这里的 1, 11, 111 等数都是十进制的,没有二进制!
那两个余数相同的数相减,得到的数一定是 n 的倍数 ( 同余的定义 ) ,且仅由 0 和 1 构成
The Generalized Pigeonhole Principle
定理 2 ——广义鸽巢原理 (THE GENERALIZED PIGEONHOLE PRINCIPLE) :如果 N N N 个物体放入 k k k 个箱子里,则至少有一个箱子里至少容纳 ⌈ N k ⌉ \lceil \dfrac{N}{k} \rceil ⌈ k N ⌉ 个物体
证明
用函数形式表示:对于一个函数 f : A → B f: A \rightarrow B f : A → B ,如果 ⌈ ∣ A ∣ ∣ B ∣ ⌉ = i \lceil \dfrac{|A|}{|B|} \rceil = i ⌈ ∣ B ∣ ∣ A ∣ ⌉ = i ,那么存在元素 a 1 , a 2 , … , a i ∈ A a_1, a_2, \dots, a_i \in A a 1 , a 2 , … , a i ∈ A ,使得 f ( a 1 ) = f ( a 2 ) = ⋯ = f ( a i ) = b ∈ B f(a_1) = f(a_2) = \dots = f(a_i) = b \in B f ( a 1 ) = f ( a 2 ) = ⋯ = f ( a i ) = b ∈ B
一类常见问题
求出物体的最少个数,满足:当这些物体分布于 k k k 个箱子里时,至少有 r r r 个物体位于其中一个箱子里
解答:最少个数 N = k ( r − 1 ) + 1 N = k(r - 1) + 1 N = k ( r − 1 ) + 1
🌰
Some Elegant Applications of the Pigeonhole Principle
例题
子序列 (subsequence) :包含一些原始序列的项并保持原来的顺序的序列
严格递增 (strictly increasing) :如果序列中的每一项都大于前一项
严格递减 (strictly decreasing) :如果序列中的每一项都小于前一项
定理 3 :具有 n 2 + 1 n^2+1 n 2 + 1 个不同实数的序列包含一个长度为 n + 1 n+1 n + 1 的子序列,满足严格递增 或严格递减
证明
例题
这个例子反映了鸽巢原理在拉姆齐理论 (Ramsey theory) 的应用
拉姆齐数 (Ramsey number) R ( m , n ) R(m, n) R ( m , n ) (m , n ≥ 2 , m , n ∈ N + m, n \ge 2, m, n \in \mathbf{N}^+ m , n ≥ 2 , m , n ∈ N + ) :派对中最小的人数,满足其中要么有 m m m 个相互的朋友,要么有 n n n 个相互的敌人(假设派对中的每一对人要么是朋友要么是敌人) 。它具有以下性质:
R ( m , n ) = R ( n , m ) R(m, n) = R(n, m) R ( m , n ) = R ( n , m )
R ( 2 , n ) = n R(2, n) = n R ( 2 , n ) = n
参考:wiki
Permutations and Combinations
Permutations
对一组不同对象的排列 (permutation) 是对这些对象的有序安排。
对集合中 r r r 个元素的有序安排被称为 r r r 排列 (r r r -permutation) ,记作 P ( n , r ) P(n, r) P ( n , r )
定理 1 :如果 n n n 是正整数,整数 r r r 满足 1 ≤ r < n 1 \le r < n 1 ≤ r < n ,那么
P ( n , r ) = n ( n − 1 ) ( n − 2 ) … ( n − r + 1 )
P(n, r) = n(n - 1)(n - 2)\dots (n - r + 1)
P ( n , r ) = n ( n − 1 ) ( n − 2 ) … ( n − r + 1 )
注:P ( n , 0 ) = 1 P(n, 0) = 1 P ( n , 0 ) = 1
推论 1 :如果 n , r n, r n , r 为整数,满足 0 ≤ r ≤ n 0 \le r \le n 0 ≤ r ≤ n ,则 P ( n , r ) = n ! ( n − r ) ! P(n, r) = \dfrac{n!}{(n - r)!} P ( n , r ) = ( n − r )! n !
🌰
Combinations
对包含 n n n 个元素的集合的 r r r 组合 (r r r -combination) 是从集合对 r r r 个元素的无序选择,记作 C ( n , r ) C(n, r) C ( n , r )
有时也记作 ( n r ) \left( \begin{array}{cccc}n \\ r\end{array} \right) ( n r ) ,被称为二项式系数 (binomial coefficient) ,这将在下一节 中讲到
定理 2 :对于 n n n 个元素的集合的 r r r 组合 (n n n 为非负整数,且整数 r r r 满足 0 ≤ r ≤ n 0 \le r \le n 0 ≤ r ≤ n ) ,等于
C ( n , r ) = n ! r ! ( n − r ) !
C(n, r) = \dfrac{n!}{r!(n - r)!}
C ( n , r ) = r ! ( n − r )! n !
观察到 C ( n , r ) = P ( n , r ) P ( r , r ) = n ( n − 1 ) … ( n − r + 1 ) r ! C(n, r) = \dfrac{P(n, r)}{P(r, r)} = \dfrac{n(n - 1) \dots (n - r + 1)}{r!} C ( n , r ) = P ( r , r ) P ( n , r ) = r ! n ( n − 1 ) … ( n − r + 1 )
在手工运算时,需要通过消去分子分母的公因数来简化计算
推论 2 :令 n , r n, r n , r 为非负整数,满足 r ≤ n r \le n r ≤ n ,则 C ( n , r ) = C ( n , n − r ) C(n, r) = C(n, n - r) C ( n , r ) = C ( n , n − r )
定义:对于一个恒等式的组合证明法 (combinatorial proof) 分为两类:
算两次证明法 (double counting proof) :使用计数参数来证明等号两边对同样的物体进行计数,但采用不同的方法
双射证明法 (bijective proof) :证明在通过等号两边的计数得到的对象集合之间存在双射关系
🌰用组合证明法来证明推论 2 :
Supplements(from Exercises)
n n n 的循环 r r r 排列 (circular r r r -permutation of n n n ) :n n n 个人中的 r r r 个围着圆桌坐下,每个座位认为是一样的
Binomial Coefficients and Identities
The Binomial Theorem
二项表达式 (binomial expression) :两项之和,比如 x + y x + y x + y (这些项也可以是常量和变量之积)
定理 1 ——二项式定理 (THE BINOMIAL THEOREM) :令 x , y x, y x , y 为变量,n n n 为非负整数,则
( x + y ) n = ∑ j = 0 n ( n j ) x n − j y j = ( n 0 ) x n + ( n 1 ) x n − 1 y + ⋯ + ( n n − 1 ) x y n − 1 + ( n n ) y n
\begin{align}
(x + y)^n & = \sum\limits_{j = 0}^n\left( \begin{array}{cccc}n \\ j\end{array}\right)x^{n - j}y^j \notag \\
& = \left( \begin{array}{cccc}n \\ 0\end{array}\right)x^n+\left( \begin{array}{cccc}n \\ 1\end{array}\right)x^{n - 1}y + \dots + \left( \begin{array}{cccc}n \\ n - 1\end{array}\right)xy^{n - 1} + \left( \begin{array}{cccc}n \\ n\end{array}\right)y^n \notag
\end{align}
( x + y ) n = j = 0 ∑ n ( n j ) x n − j y j = ( n 0 ) x n + ( n 1 ) x n − 1 y + ⋯ + ( n n − 1 ) x y n − 1 + ( n n ) y n
可以使用组合证明法证明,具体见教材 P 438 P_{438} P 438
推论 1 :令 n n n 为非负整数,则 ∑ k = 0 n ( n k ) = 2 n \sum\limits_{k = 0}^n\left( \begin{array}{cccc}n \\ k\end{array}\right) = 2^n k = 0 ∑ n ( n k ) = 2 n
推论 2 :令 n n n 为正整数,则 ∑ k = 0 n ( − 1 ) k ( n k ) = 0 \sum\limits_{k = 0}^n(-1)^k\left( \begin{array}{cccc}n \\ k\end{array}\right) = 0 k = 0 ∑ n ( − 1 ) k ( n k ) = 0
这个推论表明:
( n 0 ) + ( n 2 ) + ( n 4 ) + ⋯ = ( n 1 ) + ( n 3 ) + ( n 5 ) + ⋯ = 2 n − 1 \left( \begin{array}{cccc}n \\ 0\end{array}\right) + \left( \begin{array}{cccc}n \\ 2\end{array}\right) + \left( \begin{array}{cccc}n \\ 4\end{array}\right) + \dots = \left( \begin{array}{cccc}n \\ 1\end{array}\right) + \left( \begin{array}{cccc}n \\ 3\end{array}\right) + \left( \begin{array}{cccc}n \\ 5\end{array}\right) + \dots = 2^{n - 1} ( n 0 ) + ( n 2 ) + ( n 4 ) + ⋯ = ( n 1 ) + ( n 3 ) + ( n 5 ) + ⋯ = 2 n − 1
上面两个定理均可用组合证明法证明,具体见教材 P 439 P_{439} P 439
推论 3 :令 n n n 为非负整数,则 ∑ k = 0 n 2 k ( n k ) = 3 n \sum\limits_{k = 0}^n 2^k\left( \begin{array}{cccc}n \\ k\end{array}\right) = 3^n k = 0 ∑ n 2 k ( n k ) = 3 n
Pascal's Identity and Triangle
定理 2 ——帕斯卡恒等式 (PASCAL'S INDENTITY) :令 n , k n, k n , k 为正整数,满足 n ≥ k n \ge k n ≥ k ,则
( n + 1 k ) = ( n k − 1 ) + ( n k )
\left( \begin{array}{cccc}n + 1\\ k\end{array}\right) = \left( \begin{array}{cccc}n \\ k - 1\end{array}\right) + \left( \begin{array}{cccc}n \\ k\end{array}\right)
( n + 1 k ) = ( n k − 1 ) + ( n k )
注:
该定理也可以用组合证明法证明,具体见教材 P 440 P_{440} P 440
该定理可以用来递归定义 二项式系数
帕斯卡三角形 (Pascal's triangle) ,又称杨辉三角
Other Identities Involving Binomial Coefficients
定理 3 ——范德蒙德恒等式 (VANDERMONDE'S IDENTITY) :令 m , n , r m, n, r m , n , r 为非负整数,且 r r r 不超过 m m m 和 n n n ,则
( m + n r ) = ∑ k = 0 r ( m r − k ) ( n k )
\left( \begin{array}{cccc}m + n \\ r\end{array}\right) = \sum\limits_{k = 0}^{r}\left( \begin{array}{cccc}m \\ r - k\end{array}\right)\left( \begin{array}{cccc}n \\ k\end{array}\right)
( m + n r ) = k = 0 ∑ r ( m r − k ) ( n k )
证明
令 A , B A, B A , B 为两个不相交集合,且 ∣ A ∣ = m , ∣ B ∣ = n |A| = m, |B| = n ∣ A ∣ = m , ∣ B ∣ = n 。( m + n r ) \left( \begin{array}{cccc}m + n \\ r\end{array}\right) ( m + n r ) 表示从 A ∪ B A \cup B A ∪ B 中挑出 r r r 个元素,它等价于满足从 B B B 中挑出 k k k 个元素,从 A A A 中挑出 m − k m - k m − k 个元素的所有 r + 1 r+1 r + 1 种 (0 ≤ k ≤ r 0 \le k \le r 0 ≤ k ≤ r ) 情况
推论 4 :如果 n n n 为非负整数,那么
( 2 n n ) = ∑ k = 0 n ( n k ) 2
\left( \begin{array}{cccc}2n \\ n\end{array}\right) = \sum\limits_{k = 0}^n\left( \begin{array}{cccc}n \\ k\end{array}\right)^2
( 2 n n ) = k = 0 ∑ n ( n k ) 2
定理 4 :令 r , n r, n r , n 为非负整数,且满足 r ≤ n r \le n r ≤ n ,则
( n + 1 r + 1 ) = ∑ j = r n ( j r )
\left( \begin{array}{cccc}n + 1\\ r + 1\end{array}\right) = \sum\limits_{j = r}^n\left( \begin{array}{cccc}j \\ r\end{array}\right)
( n + 1 r + 1 ) = j = r ∑ n ( j r )
证明
利用位串
( n + 1 r + 1 ) \left( \begin{array}{cccc}n + 1\\ r + 1\end{array}\right) ( n + 1 r + 1 ) 表示在长度为 n + 1 n + 1 n + 1 的位串中有 r + 1 r + 1 r + 1 个‘1’
右边的式子中,j j j 表示最后一个 ( 第 r + 1 个 ) ‘1’的位置的前一个位置,则 ( j r ) \left( \begin{array}{cccc}j \\ r\end{array}\right) ( j r ) 表示对前面 r r r 个‘1’进行组合 ( 记住第 r+1 个‘1’的位置已经固定,不需要动 ) 。然后将所有情况相加,便等于左边的式子
Supplements(from Exercises)
如果整数 k , n k, n k , n 满足 1 ≤ k ≤ n 1 \le k \le n 1 ≤ k ≤ n ,那么 ( n k ) ≤ n k 2 k − 1 \left( \begin{array}{cccc}n \\ k\end{array}\right) \le \dfrac{n^k}{2^{k - 1}} ( n k ) ≤ 2 k − 1 n k
六边形恒等式 (hexagon identity) :如果整数 k , n k, n k , n 满足 1 ≤ k < n 1 \le k < n 1 ≤ k < n ,那么 ( n − 1 k − 1 ) ( n k + 1 ) ( n + 1 k ) = ( n − 1 k ) ( n k − 1 ) ( n + 1 k + 1 ) \left( \begin{array}{cccc}n - 1\\ k - 1\end{array}\right)\left( \begin{array}{cccc}n \\ k + 1\end{array}\right)\left( \begin{array}{cccc}n + 1\\ k\end{array}\right) = \left( \begin{array}{cccc}n - 1\\ k\end{array}\right)\left( \begin{array}{cccc}n \\ k - 1\end{array}\right)\left( \begin{array}{cccc}n + 1\\ k + 1\end{array}\right) ( n − 1 k − 1 ) ( n k + 1 ) ( n + 1 k ) = ( n − 1 k ) ( n k − 1 ) ( n + 1 k + 1 )
如果 k , r , n k, r, n k , r , n 为非负整数且 r ≤ n , k ≤ r r \le n, k \le r r ≤ n , k ≤ r ,则 ( n r ) ( r k ) = ( n k ) ( n − k r − k ) \left( \begin{array}{cccc}n \\ r\end{array}\right)\left( \begin{array}{cccc}r \\ k\end{array}\right) = \left( \begin{array}{cccc}n \\ k\end{array}\right)\left( \begin{array}{cccc}n - k \\ r - k\end{array}\right) ( n r ) ( r k ) = ( n k ) ( n − k r − k )
朱世杰恒等式 (hockeystick identity) :∑ k = 1 r ( n + k k ) = ( n + r + 1 r ) \sum\limits_{k = 1}^r\left( \begin{array}{cccc}n + k \\ k\end{array}\right) = \left( \begin{array}{cccc}n + r + 1\\ r\end{array}\right) k = 1 ∑ r ( n + k k ) = ( n + r + 1 r ) ,其中 n , r n, r n , r 为正整数
如果 n n n 为正整数,那么 ( 2 n 2 ) = 2 ( n 2 ) + n 2 \left( \begin{array}{cccc}2n \\ 2\end{array}\right) = 2\left( \begin{array}{cccc}n \\ 2\end{array}\right) + n^2 ( 2 n 2 ) = 2 ( n 2 ) + n 2
∑ k = 1 n k ( n k ) = n 2 n − 1 \sum\limits_{k = 1}^nk\left( \begin{array}{cccc}n \\ k\end{array}\right) = n2^{n - 1} k = 1 ∑ n k ( n k ) = n 2 n − 1
∑ k = 1 n k ( n k ) 2 = n ( 2 n − 1 n − 1 ) \sum\limits_{k = 1}^nk\left( \begin{array}{cccc}n \\ k\end{array}\right)^2 = n\left( \begin{array}{cccc}2n - 1\\ n - 1\end{array}\right) k = 1 ∑ n k ( n k ) 2 = n ( 2 n − 1 n − 1 )
Generalized Permutations and Combinations
Permutation with Repetition
定理 1 :对包含 n n n 类对象的集合进行 r r r 排列,如果允许重复 ,则总数为 n r n^r n r
Combination with Repetition
定理 2 :对包含 n n n 类对象的集合进行 r r r 组合,如果允许重复 ,则总数为 C ( n − 1 + r , r ) = C ( n − 1 + r , n − 1 ) C(n - 1 + r, r) = C(n - 1 + r, n - 1) C ( n − 1 + r , r ) = C ( n − 1 + r , n − 1 ) ,记作 H n r H_n^r H n r
证明
用 n − 1 n - 1 n − 1 个竖线 (∣ | ∣ ) 划分出 n n n 个小块,每当集合中第 i i i 个元素在组合中出现一次时,就在第 i i i 个小块的位置上添加一个星号 (∗ * ∗ ) ,比如 ∗ ∗ ∣ ∗ ∣ ∣ ∗ ∗ ∗ **|*|\quad |**\ * ∗ ∗ ∣ ∗ ∣ ∣ ∗ ∗ ∗
当完成 r r r 组合后,应当得到 n − 1 n - 1 n − 1 个竖线和 r r r 个星号,问题就转化为
在 n − 1 + r n - 1 + r n − 1 + r 个位置(所有竖线和星号个数的总和)上放置 r r r 个星号 ( 由于每个星号都是一样的,所以是个组合问题 ) ,空出 n − 1 n - 1 n − 1 个位置放置竖线,因此是 C ( n − 1 + r , r ) C(n - 1 + r, r) C ( n − 1 + r , r )
或者反过来,先放置 n − 1 n - 1 n − 1 个竖线,空出的 r r r 个位置放星号,得到 C ( n − 1 + r , n − 1 ) C(n - 1 + r, n - 1) C ( n − 1 + r , n − 1 )
例题
总结:
Permutation with Indistinguishable Objects
定理 3 :对 n n n 个物体进行排列,其中有 n 1 n_1 n 1 个属于类型 1 的物体,n 2 n_2 n 2 个属于类型 2 的物体,… , n k \dots, n_k … , n k 个属于类型 k k k 的物体,则排列种数为 n ! n 1 ! n 2 ! … n k ! \dfrac{n!}{n_1!n_2!\dots n_k!} n 1 ! n 2 ! … n k ! n !
注:n = ∑ j = 1 k n j n = \sum\limits_{j = 1}^kn_j n = j = 1 ∑ k n j
证明
先对 n 1 n_1 n 1 个属于类型 1 的物体排列,然后对 n 2 n_2 n 2 个属于类型 2 的物体排列,以此类推,最后对 n k n_k n k 个属于类型 k k k 的物体排列,因此得到:
C ( n , n 1 ) ⋅ C ( n − n 1 , n 2 ) ⋅ ⋯ ⋅ C ( n − n 1 − n 2 − ⋯ − n k − 1 , n k ) = n ! n 1 ! ( n − n 1 ) ! ⋅ ( n − n 1 ) n 2 ! ( n − n 1 − n 2 ) ! ⋅ ⋯ ⋅ ( n − n 1 − n 2 − ⋯ − n k − 1 ) n k ! ( n − n 1 − n 2 − ⋯ − n k ) ! = n ! n 1 ! n 2 ! … n k !
\begin{align}
& C(n, n_1) \cdot C(n - n_1, n_2) \cdot \dots \cdot C(n -n_1 - n_2 - \dots -n_{k - 1}, n_k) \notag \\
= & \dfrac{n!}{n_1!(n - n_1)!} \cdot \dfrac{(n - n_1)}{n_2!(n - n_1 - n_2)!} \cdot \dots \cdot \dfrac{(n - n_1 - n_2 - \dots - n_{k - 1})}{n_k!(n - n_1 - n_2 - \dots - n_k)!} \notag \\
= & \dfrac{n!}{n_1!n_2!\dots n_k!} \notag
\end{align}
= = C ( n , n 1 ) ⋅ C ( n − n 1 , n 2 ) ⋅ ⋯ ⋅ C ( n − n 1 − n 2 − ⋯ − n k − 1 , n k ) n 1 ! ( n − n 1 )! n ! ⋅ n 2 ! ( n − n 1 − n 2 )! ( n − n 1 ) ⋅ ⋯ ⋅ n k ! ( n − n 1 − n 2 − ⋯ − n k )! ( n − n 1 − n 2 − ⋯ − n k − 1 ) n 1 ! n 2 ! … n k ! n !
注:对 n j n_j n j 个相同物体进行排列,等于对这些物体的组合
Distributing Objects into Boxes
不难想到,很多计数问题都可以抽象为计算将物体放入箱子的方法个数 。现在让我们来看一下这两种情况:
可区分的 (distinguishable, labeled) :每个物体或箱子都是不同的
不可区分的 (indistinguishable, unlabeled) :可以把物体或箱子看成是相同的
对于物体和箱子,都有可能具备上述两种情况中的一种,因此共有以下四种情况,其中前两者可以用闭合公式 (closed formula) 来表述
闭合公式 :可以用有限步的运算,求解包含数字、变量、函数值的表达式
Distinguishable Objects and Distinguishable Boxes
定理 4 :将 n n n 个可区别的物体放入 k k k 个可区分的箱子中 ( 因此 n i n_i n i 表示放入第 i i i 个箱子里的物体个数,i = 1 , 2 , … , k i = 1, 2, \dots, k i = 1 , 2 , … , k ),则方法个数为 n ! n 1 ! n 2 ! … n k ! \dfrac{n!}{n_1!n_2!\dots n_k!} n 1 ! n 2 ! … n k ! n !
不难发现,定理 3 和定理 4 之间存在双射 关系
🌰
Indistinguishable Objects and Distinguishable Boxes
结论:将 r r r 个不可区分的物体放入 n n n 个可区分的箱子的方法数为 C ( n − 1 + r , n − 1 ) C(n - 1 + r, n - 1) C ( n − 1 + r , n − 1 ) 种
注:这类问题和对具有 n n n 元素集合的可重 r r r 组合之间存在双射 关系
🌰
Distinguishable Objects and Indistinguishable Boxes
正如前文所言,没有一种闭合公式能够求解将 n n n 个可区分物体放入 j j j 个不可区分的箱子的方法数。但是,有一种数可以用来求解这类问题——第二类斯特林数 (Stirling numbers of the second kind) ,记作 S ( n , j ) S(n, j) S ( n , j ) ,它表示将 n 个可区分物体放入 j 个不可区分的箱子,且每个箱子非空 的方法数。它有以下性质:
S ( r , 1 ) = S ( r , r ) = 1 ( r ≥ 1 ) S(r, 1) = S(r, r) = 1 (r \ge 1) S ( r , 1 ) = S ( r , r ) = 1 ( r ≥ 1 )
S ( r , 2 ) = 2 r − 1 − 1 S(r, 2) = 2^{r - 1} - 1 S ( r , 2 ) = 2 r − 1 − 1
S ( r , r − 1 ) = C ( r , 2 ) S(r, r - 1) = C(r, 2) S ( r , r − 1 ) = C ( r , 2 )
S ( r + 1 , n ) = S ( r , n − 1 ) + n S ( r , n ) S(r + 1, n) = S(r, n - 1) + nS(r, n) S ( r + 1 , n ) = S ( r , n − 1 ) + n S ( r , n )
可以将 S ( n , j ) S(n, j) S ( n , j ) 看作将具有 n n n 个元素的集合划分为 j j j 个不相交的子集的方法数
利用容斥原理,可以得到 S ( n , j ) = 1 j ! ∑ i = 0 j − 1 ( − 1 ) j ( j i ) ( j − i ) n S(n, j) = \dfrac{1}{j!}\sum\limits_{i = 0}^{j - 1}(-1)^j\left( \begin{array}{cccc}j \\ i\end{array}\right)(j - i)^n S ( n , j ) = j ! 1 i = 0 ∑ j − 1 ( − 1 ) j ( j i ) ( j − i ) n
在Chap 8 中,我们会利用满射函数的个数 与第二类斯特林数之间的双射 关系得到更便于记忆的公式 ( 满射函数的个数就是利用容斥原理推出来的 ) 。
将 n n n 个可区分物体放入 k k k 个不可区分的箱子的方法数为 ∑ j = 1 k S ( n , j ) = ∑ j = 1 k 1 j ! ∑ i = 0 j − 1 ( − 1 ) j ( j i ) ( j − i ) n \sum\limits_{j = 1}^kS(n, j) = \sum\limits_{j = 1}^k\dfrac{1}{j!}\sum\limits_{i = 0}^{j - 1}(-1)^j\left( \begin{array}{cccc}j \\ i\end{array}\right)(j - i)^n j = 1 ∑ k S ( n , j ) = j = 1 ∑ k j ! 1 i = 0 ∑ j − 1 ( − 1 ) j ( j i ) ( j − i ) n
求和是因为这里采用了分类讨论的思想,分为:保证 1 个箱子非空的情况,保证 2 个箱子非空的情况,...,保证 k 个箱子非空的情况。
第一类斯特林数用的不多,感兴趣的可以见最后的 Supplements
例题
Indistinguishable Objects and Indistinguishable Boxes
可以将这类题看作:求解至多 k k k 个非递增顺序排列的整数之和等于 n n n 的所有可能情况数,即 a 1 + a 2 + ⋯ + a k = n a_1 + a_2 + \dots + a_k = n a 1 + a 2 + ⋯ + a k = n ,其中 a 1 , a 2 , … , a k a_1, a_2, \dots, a_k a 1 , a 2 , … , a k 为正整数,满足 a 1 ≥ a 2 ≥ ⋯ ≥ a k a_1 \ge a_2 \ge \dots \ge a_k a 1 ≥ a 2 ≥ ⋯ ≥ a k
,称a j ( j ∈ [ 1 , k ] ) a_j\ (j \in [1, k]) a j ( j ∈ [ 1 , k ]) 为将正整数n n n 划分为j j j 个正整数的隔板 (partition) ,记 p k ( n ) p_k(n) p k ( n ) 为将 n n n 划分为至多 k k k 个正整数的隔板个数。那么将 n n n 个不可区分的对象放入 k k k 个不可区分的箱子的方法数即为 p k ( n ) p_k(n) p k ( n )
注:没有闭合公式能够求解这类问题
🌰
Supplements(from Exercises)
多项式定理 (Multinomial Theorem) :如果 n n n 为正整数,则
( x 1 + x 2 + ⋯ + x m ) n = ∑ n 1 + n 2 + ⋯ + n m = n C ( n ; n 1 , n 2 , … , n m ) x 1 n 1 x 2 n 2 … x m n m
(x_1 + x_2 + \dots + x_m)^n = \sum\limits_{n_1 + n_2 + \dots + n_m = n}C(n;n_1, n_2, \dots, n_m)x_1^{n_1}x_2^{n_2} \dots x_m^{n_m}
( x 1 + x 2 + ⋯ + x m ) n = n 1 + n 2 + ⋯ + n m = n ∑ C ( n ; n 1 , n 2 , … , n m ) x 1 n 1 x 2 n 2 … x m n m
其中 C ( n ; n 1 , n 2 , … , n m ) = n ! n 1 ! n 2 ! … n m ! C(n;n_1, n_2, \dots, n_m) = \dfrac{n!}{n_1!n_2! \dots n_m!} C ( n ; n 1 , n 2 , … , n m ) = n 1 ! n 2 ! … n m ! n !
Generating Permutations and Combinations
Generating Permutations
:按词典序 (lexicographic/dictionary ordering) 列出所有 n n n 个元素的排列情况
由于时间问题,具体原理就不分析了,直接贴上算法的伪代码
Generating Combinations
利用位串,具体原理也不分析了
Supplements(from Exercises)
另一种生成组合的方法是利用康托数 (Cantor digits) ,具体略
Supplements
无符号第一类斯特林数 (signless Stirling number of the first kind) :记作 c ( n , k ) c(n, k) c ( n , k ) ,其中整数 n , k n, k n , k 满足 1 ≤ k ≤ n 1 \le k \le n 1 ≤ k ≤ n ,它等于为 n n n 个人分配 k k k 个圆桌上的座位,使得至少有一个人有座位的方法数。对于两种方法,如果每个人都有相同的左右邻居,则认为这两种方法是一样的
2025年3月21日 15:57:34
2024年6月12日 14:11:51
评论区
如果大家有什么问题或想法,欢迎在下方留言~