组合数学 - 例题:求子集的个数
问题:设集合元素个数为n,求子集的个数。
解1:集合元素选择法
根据集合论基本定理,每个元素都有「存在」和「不存在」两种状态,通过乘法原理可得总数为 2n2^n2n。
推导过程
首先讨论集合 {a} 的情形,它的子集为 ∅、{a},即 a 存在和不存在的两个情形,子集的总数为 21=22^1=221=2 个。
然后讨论集合 {a,b} 的情形,它的子集为 ∅、{a}、{b}、{a,b},即对于每个{a} 的子集,我们分别考虑 b 存在和不存在的两个情形。例如对于集合 {a} 的子集 {a} ,元素 b 有存在和不存在的两个情形,分别为 {a}、{a,b}。因此,根据乘法原理,子集的总数为 22=42^2=422=4 个。
推广到n元素 :每个元素有2种选择,总选择方式为 2×2×⋯×2⏟n个=2n\underbrace{2 \times 2 \times \cdots \times 2}_{n个} = 2^nn个2×2×⋯×2=2n
解2:组合数求和法
解题思路
对于一个元素个数为nnn 的集合,求其所有子集的个数可以通过计算不同元素个数的子集数量之和得到。具体来说:
- 包含000 个元素的子集个数为Cn0C_{n}^0Cn0,即从nnn 个元素中选000 个元素的组合数,只有一种情况,就是空集∅\varnothing∅。
- 包含111 个元素的子集个数为Cn1C_{n}^1Cn1,即从nnn 个元素中选111 个元素的组合数。
- 包含222 个元素的子集个数为Cn2C_{n}^2Cn2,即从nnn 个元素中选222 个元素的组合数。
-⋯\cdots⋯ - 包含nnn 个元素的子集个数为CnnC_{n}^nCnn,即从nnn 个元素中选nnn 个元素的组合数,只有一种情况,就是原集合本身。
计算过程
所有子集的个数就是这些不同元素个数的子集数量之和,即:
∑k=0nCnk=Cn0+Cn1+Cn2+⋯+Cnn \sum_{k = 0}^{n}C_{n}^k=C_{n}^0 + C_{n}^1+C_{n}^2+\cdots+C_{n}^n k=0∑nCnk=Cn0+Cn1+Cn2+⋯+Cnn
根据二项式定理(a+b)n=∑k=0nCnkan−kbk(a + b)^n=\sum_{k = 0}^{n}C_{n}^k a^{n - k}b^{k}(a+b)n=k=0∑nCnkan−kbk
当a=b=1a=b = 1a=b=1 时,有(1+1)n=∑k=0nCnk×1n−k×1k(1 + 1)^n=\sum_{k = 0}^{n}C_{n}^k\times1^{n - k}\times1^{k}(1+1)n=k=0∑nCnk×1n−k×1k
即
2n=∑k=0nCnk2^n=\sum_{k = 0}^{n}C_{n}^k2n=k=0∑nCnk
所以,元素个数为 nnn 的集合的所有子集个数为2n2^n2n。