轻松理解排列与组合

我总是分不清“排列(Permutation)”和“组合(Combination)”——哪个是哪个?

这里有个简单的记忆方法: 排列听起来很复杂,不是吗?确实如此。对于排列(Permutation),每个小细节都很重要。爱丽丝、鲍勃和查理与查理、鲍勃和爱丽丝是不同的(请在此插入你朋友的名字)。

另一方面,组合(Combination)就随意多了。细节不重要。爱丽丝、鲍勃和查理与查理、鲍勃和爱丽丝是一样的。

排列用于列表(顺序重要),组合用于分组(顺序不重要)。

你知道吗,“组合锁(combination lock)”其实应该叫“排列锁(permutation lock)”。你输入数字的顺序很重要。

Easy Permutations and Combinations

一个真正的“组合锁(combination lock)”会同时接受10-17-23和23-17-10作为正确密码。

排列(Permutation):繁琐的细节

我们从排列(Permutation)开始,或者说 所有可能的方式 做某件事的方式。我们用了花哨的术语“排列(Permutation)”,所以我们要关心每一个细节,包括每个项目的顺序。假设我们有8个人:

1: Alice
2: Bob
3: Charlie
4: David
5: Eve
6: Frank
7: George
8: Horatio

在八名参赛者中,有多少种方式可以颁发一、二、三等奖?(金牌/银牌/铜牌)

permuation example medals

我们将使用排列(Permutation),因为颁发这些奖牌的顺序很重要。分解如下:

  • 金牌:8个选择:A B C D E F G H(我让名字与字母对应,聪明吧?)。假设A赢得了金牌。
  • 银牌:7个选择:B C D E F G H。假设B赢得银牌。
  • 铜牌:6个选择:C D E F G H。假设……C赢得铜牌。

我们选了某些人获胜,但细节不重要:我们最初有8个选择,然后7个,然后6个。总选项数为$8 * 7 * 6 = 336$。

让我们看看细节。我们需要从8个人中选出3人的顺序。为此,我们从所有选项(8)开始,然后一次减少一个(7,然后6),直到没有奖牌为止。

我们知道阶乘是:

\displaystyle{ 8! = 8 \cdot 7 \cdot 6 \cdot 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1 }

不幸的是,那太多了!我们只想要$8 * 7 * 6$。如何让阶乘在5处“停止”?

这就是排列(Permutation)的酷炫之处:注意我们想要去掉$5 * 4 * 3 * 2 * 1$。它的另一个名称是什么?5的阶乘!

所以,如果我们计算8!/5!,我们得到:

\displaystyle{\frac{8!}{5!} = \frac{8 \cdot 7 \cdot 6 \cdot 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1}{5 \cdot 4 \cdot 3 \cdot 2 \cdot 1}  = 8 \cdot 7 \cdot 6}

我们为什么用了数字5?因为从8个中选3个奖牌后还剩5个。所以,更好的写法是:

\displaystyle{\frac{8!}{(8-3)!}}

其中 8!/(8-3)! 只是“使用8的前3个数”的一种花哨说法。如果我们有 n 总共有n个物品,想要按特定顺序选取 k r个,我们得到:

\displaystyle{\frac{n!}{(n-k)!}}

这就是花哨的排列公式:你有 n n个物品,想要找出 k r个物品可以排列的方式数:

\displaystyle{P(n,k) = \frac{n!}{(n-k)!}}

组合(Combination),嘿!

组合就简单多了。顺序不重要。你可以打乱顺序,结果看起来一样。假设我很抠门,买不起单独的Gold、Silver和Bronze奖牌。实际上,我只买得起空易拉罐。

有多少种方式可以把3个空易拉罐给8个人?

嗯,在这种情况下,我们选人的顺序无关紧要。如果我给Alice、Bob和Charlie每人一个罐子,这和先给Charlie、再给Alice、最后给Bob是一样的。不管怎样,他们一样失望。

这引出了一个有趣的问题——这里有一些冗余。Alice、Bob、Charlie = Charlie、Bob、Alice。我们先算算3个人有多少种重新排列方式。

嗯,第一个人有3种选择,第二个人有2种,最后一个人只有1种。所以有 $3 * 2 * 1$ 种方式重新排列3个人。

等等……这看起来有点像排列!你骗了我!

确实骗了你。如果你有N个人,想知道从中选出 所有 r个人的排列数,那就是N的阶乘,即N!

所以,如果我们有3个空罐子要送出,对于每一个选择的组合,都有3!即6种变化。如果我们想知道有多少种组合,我们只需 生成所有排列,再除以所有冗余除以每个排列的冗余数。在我们的例子中,有336种排列(从上面),除以每个排列的6种冗余,得到336/6 = 56。

通用公式是

\displaystyle{C(n,k) = \frac{P(n,k)}{k!}}

意思是“找出从n个人中选k个人的所有方式,再除以k!种变体”。写出来,我们得到 组合公式(combination formula)即从n个物品中组合k个的方式数:

\displaystyle{C(n,k) = \frac{n!}{(n-k)!k!}}

有时 $C(n,k)$ 写作:

\displaystyle{\binom {n}{k}}

也就是 二项式系数(binomial coefficient).

几个例子

这里有几个从排列(顺序重要)中区分组合(顺序无关)的例子。

  • 组合:从10人中选3人组成团队。$C(10,3) = 10!/(7! * 3!) = 10 * 9 * 8 / (3 * 2 * 1) = 120$。

    排列:从10人中选出一名主席、一名副主席和一名打水员。$P(10,3) = 10!/7! = 10 * 9 * 8 = 720$。

  • 组合:从10种甜点中选3种。C(10,3) = 120。

    排列:从10种甜点中按顺序列出你最喜欢的3种。P(10,3) = 720。

不要死记公式,要理解它们为什么成立。 组合听起来比排列简单,确实如此。组合的数量少于排列。

本系列其他文章

  1. 轻松理解排列与组合
  2. 使用组合(Combination)与排列(Permutation)在网格中导航
  3. 如何通过乘法理解组合(Combination)
  4. 我们为什么要乘以组合(Combination)?

主题参考

加入 45 万月度读者

喜欢这篇文章?还有更多内容能帮你建立持久、直观的数学理解。加入通讯以获取额外内容和最新更新。