A Study On Grouping Problems

座位问题

设想一个房间中有 10 把椅子, 现在有 6 个人准备随机地在房间中选择一把椅子落座。已知有 4 把椅子在前排, 求前排椅子被坐满的概率。

方法一:排列视角

一种思路是将这个问题看成是一个排列问题, 即考虑每个人落座的顺序。那么样本空间的大小(Total number of outcomes)为:

$$ {}_{10}P_{6} $$

下面只要计算在所有这些情况中, 满足"前排 4 把椅子被坐满"这一条件的排列数即可。

可以认为有 3 个步骤:

  1. 从 6 个人中随机抽取 4 个人, 有 \(\binom{6}{4}\) 种可能。
  2. 将这 4 个人安排到前排的 4 把椅子上, 共有 \(4!\) 种排列。
  3. 待这 4 个人选定之后, 剩下的 2 个人从剩下的 6 把椅子中随机选择 2 个落座, 共有 \({}_{6}P_{2}\) 种排列。

根据乘法原理, 满足条件的排列总数为:

$$ \binom{6}{4}\times 4!\times {}_{6}P_{2} = {}_{6}P_{4}\times {}_{6}P_{2} $$

概率为两者相除:

$$ \frac{{}_{6}P_{4}\times {}_{6}P_{2}}{{}_{10}P_{6}} = \frac{\frac{6!}{2!}\times\frac{6!}{4!}}{\frac{10!}{4!}} = \frac{6\times 5\times 4\times 3}{10\times 9\times 8\times 7} = \frac{1}{14} $$

方法二:组合视角

从另一个视角来看, 还有更简单的办法。不管怎么选, 结果都是从 10 把椅子中选出 6 把被占据, 因此样本空间的大小为 \(\binom{10}{6}\)。

那么这其中有多少种情况包括了前排的 4 把椅子呢?既然前面的 4 把椅子必然被选出, 那么只需要从剩下的 6 把中再选出 2 把即可, 也就是 \(\binom{6}{2}\)。

概率为:

$$ \frac{\binom{6}{2}}{\binom{10}{6}} $$

由于在计算样本空间时就没有考虑顺序问题, 因此在计算事件数时也无需考虑落座时的顺序。

使用 Python 验证两次计算是否一致:

Show/Hide the code
1
2
3
4
5
6
import math

# 方法一 vs 方法二
res1 = 1/14
res2 = math.comb(6, 2) / math.comb(10, 6)
print(f"方法一: {res1}\n方法二: {res2}")
方法一: 0.07142857142857142
方法二: 0.07142857142857142

分组问题

设想, 现在要将 4 个人平均地分为 {A, B} 两组。共有多少种分法?

有标签分组(分配问题)

由于是分组, 小组内部的顺序不重要。假如 4 个人是 a, b, c, d, 那么 {{a, b}, {c, d}}{{b, a}, {d, c}} 是同一种分组。

但是, 这里小组之间的顺序是重要的(有标签), 因为我们明确区分了 A 组和 B 组。因此 A={a, b}, B={c, d}A={c, d}, B={a, b} 是不同的分法。

从 4 个人中随机抽取 2 人分到 A 组, 那么剩下的人自然就组成了 B 组, 共有 \(\binom{4}{2}\) 种分法。

无标签分组(平均分组问题)

如果不区分小组标签呢?也就是说现在是"无标签"地分组, 那么 {{a, b}, {c, d}}{{c, d}, {a, b}} 就是完全相同的分组方式。

此时分组数量显然会减少。由于 {A, B}{B, A} 对应同一种分组, 导致了重复。当不考虑 \(k\) 个组的顺序时, 数量需要除以 \(k!\)。在本例中, 有 2 个大小相同的组, 因此最终结果为:

$$ \frac{\binom{4}{2}}{2!} $$

另一种思路是先计算所有人全排列有多少种可能, 再逐渐加入限制(消序)。

  • 4 个人全排列:\(4!\)
  • 消除第 1 组内部顺序:除以 \(2!\)
  • 消除第 2 组内部顺序:除以 \(2!\)
  • 消除组与组之间的顺序:除以 \(2!\)

最终结果为:

$$ \frac{4!}{2!\times 2!\times 2!} $$

验证两种方法的结果:

Show/Hide the code
1
2
3
import math

print(f"方法一: {math.comb(4,2)/2}\n方法二: {math.factorial(4)/ (2**3)}")
方法一: 3.0
方法二: 3.0

混合分组(局部平均)

如果是人数不等的分组, 通常无需考虑小组之间的排序。但如果存在部分小组人数相同的情况, 则仍需去除这些相同大小小组之间的顺序。

例如, 将 5 个人无标签地分为 3 组, 人数为 {2, 2, 1}

  1. 先从 5 人中选 1 人独立成组(大小为 1 的组只有 1 个, 无需消序):\(\binom{5}{1}\)。
  2. 再将剩下的 4 人平均分成两个 2 人组(大小为 2 的组有 2 个, 需要消序):\(\frac{\binom{4}{2}}{2!}\)。

最终将 2 个步骤相乘:

$$ \binom{5}{1} \times \frac{\binom{4}{2}}{2!} $$
Show/Hide the code
1
2
3
import math

print((math.comb(5,1) * math.comb(4,2)) / 2)
15.0
使用 Hugo 构建
主题 StackJimmy 设计