如何计算组合的所有可能变体?含可重复、不可重复及无序场景
你已经搞懂了可重复排列的情况:从10个数字里选3个,每个位置都能重复选,所以是 10^3 = 1000 种,完全正确。接下来咱们拆解另外两个你关心的场景:
场景1:数字不可重复的排列(无重复,位置有意义)
这种情况属于无重复排列问题——第一个位置你有10种选择(0到9全选),选完之后第二个位置不能用已经选过的数字,就只剩9种可选;到第三个位置,再去掉前两个选过的数字,就只剩8种。直接相乘就能得到总数:10 × 9 × 8 = 720
用排列数公式表示就是 P(10, 3) = 10! / (10-3)!,计算结果和上面一致。
场景2:位置无关的组合(不考虑顺序,视为同一组合)
这里要分两种子情况,毕竟你提到了像116、161、611这类带重复数字的组合也视为同一,所以得区分是否允许数字重复:
子情况2.1:允许数字重复的组合(位置无关)
这是典型的可重复组合问题,对应的公式是 C(n + k - 1, k),其中n是总数字数量(这里是10),k是要选的数字个数(这里是3)。代入计算:C(10 + 3 - 1, 3) = C(12, 3) = (12×11×10)/(3×2×1) = 220
简单解释下思路:可以把这个问题转化为“把3个相同的‘选择标记’放到10个数字对应的‘槽’里”,用9个分隔符把10个槽分开,总共就有10+3-1=12个位置,选3个位置放标记,剩下的放分隔符,这样就对应了每个数字被选中的次数,自然就不用考虑顺序了。
子情况2.2:不允许数字重复的组合(位置无关)
如果同时要求数字不能重复,且位置无关,那就是普通的无重复组合,公式是 C(10, 3) = 10! / (3! × (10-3)!),计算下来:(10×9×8)/(3×2×1) = 120
道理很简单:从10个数字里选3个,原本的排列数有720种,但每一组3个不同的数字会被数6次(3个数字的全排列数是3! = 6),所以除以6就能得到不考虑顺序的组合数。
内容的提问来源于stack exchange,提问作者PonasM

