数学 / 排列组合 · 从计数原理到 P(n,k) 与 C(n,k) / 组合 C(n, k) 待审核 6 / 25
combination · C(n, k) = P(n, k) / k!

组合 C(n, k)

仍是从 nn 个不同元素里取 kk 个,但这次不计次序,{A,B,C}\{A, B, C\}{C,B,A}\{C, B, A\} 是同一个组合。这样的方案数记作组合数 C(n,k)C(n, k),中文教材写作 CnkC_n^k,也常写成二项式系数 (nk)\binom{n}{k}。它与排列只差一个因子:把排列里那 k!k! 种「同一组元素的不同顺序」压成一种,就得到组合。

1 · 折叠掉 k 阶乘种顺序

C(n, k) = P(n, k) / k! = n! / (k!·(n−k)!)

同一组 kk 个元素能排成 k!k! 种不同顺序,它们在排列里各算一个、在组合里只算一个。所以把排列数除以 k!k! 即得组合数:

C(n,k)=P(n,k)k!=n!k!(nk)!C(n, k) = \frac{P(n, k)}{k!} = \frac{n!}{k!\,(n-k)!}
图 1-1 · 取头 kk 个字母作一组,列出它的全部 k!k! 种顺序,观察它们如何折叠成一个组合。

2 · 枚举与对称性

enumerate · C(n, k) = C(n, n−k)

无序取 kk 个的全部组合共 C(n,k)C(n, k) 个。另有一条常用性质:选出 kk 个等价于丢掉 nkn-k 个,每挑一个大小为 kk 的子集就唯一对应一个大小为 nkn-k 的补集,于是 C(n,k)=C(n,nk)C(n, k) = C(n, n-k)

图 2-1 · 无序取 kk 个的全部组合。可拖动滑块,观察 C(n,k)C(n, k)C(n,nk)C(n, n-k) 始终相等。

两个常用的边界值:C(n,0)=C(n,n)=1C(n, 0) = C(n, n) = 1,取空集或取全体各只有一种;C(n,1)=C(n,n1)=nC(n, 1) = C(n, n-1) = n,取一个或丢一个。把 kk00 拉到 nn,组合数先增后减、关于中间对称,这正是 Pascal 三角每一行的形状。

3 · 参考文献

  1. Combination. Wikipedia. 组合、二项式系数与常用恒等式。https://en.wikipedia.org/wiki/Combination
  2. Binomial coefficient. Wikipedia. C(n,k)C(n, k) 的多种写法、对称性与求和公式。https://en.wikipedia.org/wiki/Binomial_coefficient