组合数学学习笔记
计数原理
计数技巧
等效替代(映射):
构造一个映射,将每一种原问题的方案映射为新问题的一种方案,并使答案更容易计算。
例如捆绑法,插空法,隔板法等。
捆绑法: 也成整体法,即若要求若干物品相邻,可以将他们视作一个整体来计数。
插空法: 如果要求若干物品两两不相邻,可以先将其他物品放好,然后将这些物品插入空挡当中进行计数。
隔板法: 将不可区分物品分配问题、不定方程整数解问题转化为插板组合问题。
经典例题: 把 n n n 个相同的苹果分给 k k k 个人,要求每人至少分到一个的方案数。(求解不定方程 x 1 + x 2 + . . . + x k = n x_1+x_2+...+x_k=n x1+x2+...+xk=n( ∀ i ∈ [ 1 , k ] , 1 ≤ x i ≤ n \forall i \in [1, k], 1 \le x_i \le n ∀i∈[1,k],1≤xi≤n) 的解的个数)。
解决方案: 有 n − 1 n-1 n−1 个空隙,在这些空隙中插入 k − 1 k-1 k−1 个板将苹果分为 k k k 部分,方案数为 C n − 1 k − 1 C^{k-1}_{n-1} Cn−1k−1。
拓展问题 1: 求解不定方程 x 1 + x 2 + . . . + x k = n x_1+x_2+...+x_k=n x1+x2+...+xk=n( ∀ i ∈ [ 1 , k ] , 0 ≤ x i ≤ n \forall i \in [1, k], 0 \le x_i \le n ∀i∈[1,k],0≤xi≤n) 的解的个数。
解决方案: 将每个 x x x 提前加一个 1 1 1,问题变成了 “求解不定方程 x 1 + x 2 + . . . + x k = n + k x_1+x_2+...+x_k=n+k x1+x2+...+xk=n+k( ∀ i ∈ [ 1 , k ] , 1 ≤ x i ≤ n + k \forall i \in [1, k], 1 \le x_i \le n+k ∀i∈[1,k],1≤xi≤n+k) 的解的个数。”。
拓展问题 2: 求解不定方程 x 1 + x 2 + . . . + x k ≤ n x_1+x_2+...+x_k \le n x1+x2+...+xk≤n( ∀ i ∈ [ 1 , k ] , 1 ≤ x i ≤ n \forall i \in [1, k], 1 \le x_i \le n ∀i∈[1,k],1≤xi≤n) 的解的个数。
解决方案: 添加一个新的板子放在最后面。问题变成了将 n n n 分成 k + 1 k+1 k+1 部分,前 k k k 份元素个数大于等于 1 1 1 的方案数。
容斥原理
摩根定理
交集的补等于补集的并,并集的补等于补集的交。
A ∩ B ‾ = A ‾ ∪ B ‾ , A ∪ B ‾ = A ‾ ∩ B ‾ \overline{A \cap B} = \overline{A} \cup \overline{B},\overline{A \cup B} = \overline{A} \cap \overline{B} A∩B=A∪B,A∪B=A∩B。
∣ A ∪ B ∣ = ∣ A ∣ + ∣ B ∣ − ∣ A ∩ B ∣ |A \cup B| = |A| + |B| - |A \cap B| ∣A∪B∣=∣A∣+∣B∣−∣A∩B∣
∣ A ∪ B ∪ C ∣ = ∣ A ∣ + ∣ B ∣ + ∣ C ∣ − ∣ A ∩ B ∣ − ∣ A ∩ C ∣ − ∣ B ∩ C ∣ + ∣ A ∩ B ∩ C ∣ |A \cup B \cup C| = |A| + |B| + |C| - |A \cap B| - |A \cap C| - |B \cap C| + |A \cap B \cap C| ∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣
另一种形式:
∣ ⋃ i = 1 n A i ∣ = ∑ S u b s e t ⊆ { 1 , 2 , … n } ≠ ∅ ( − 1 ) ∣ S u b s e t ∣ + 1 × ∣ ⋂ j ⊆ S u b s e t A j ∣ \left | \bigcup_{i=1}^nA_i \right | = \sum_{Subset \ \subseteq \ \{1, 2, \dots n\} \ \not= \ \emptyset}(-1)^{\left |Subset \right| + 1} \times \left | \bigcap_{j \ \subseteq \ Subset} A_j\right | i=1⋃nAi =Subset ⊆ {1,2,…n} = ∅∑(−1)∣Subset∣+1× j ⊆ Subset⋂Aj
排列组合
排列数
将 n n n 个不同的物品排成一行,有多少种不同的顺序?
1 × 2 × 3 × ⋯ × n = n ! 1 \times 2 \times 3 \times \dots \times n = n! 1×2×3×⋯×n=n!
从 n n n 个物品中选出 k k k 个排成一行,考虑每个数的顺序,有多少种不同的选法,写作 A n k A^k_n Ank。
排列数计算公式:
( n − k + 1 ) × ( n − k + 2 ) × ( n − k + 3 ) × ⋯ × n = n ! ( n − k ) ! (n-k+1) \times (n-k+2) \times (n-k+3) \times \dots \times n = \frac{n!}{(n-k)!} (n−k+1)×(n−k+2)×(n−k+3)×⋯×n=(n−k)!n!
组合数
从