从基础公式到实际应用,彻底搞懂排列与组合
排列组合是组合数学中最基础的部分。简单说,排列关心顺序,组合不关心顺序。当我们讨论 1,2,3,4,5 这五个数字时,所有可能的排列数就是 5! = 120,而组合数则根据选取个数不同而变化。掌握1到5的排列组合,就能轻松理解更复杂的计数问题。
核心公式:
排列数 P(n,k) = n!/(n−k)! | 组合数 C(n,k) = n!/(k!(n−k)!)
从1,2,3,4,5中选3个数字排列,有多少种?
P(5,3) = 5×4×3 = 60。
例如 (1,2,3) 和 (3,2,1) 视为不同。
从1,2,3,4,5中选3个数字组合,不关心顺序。
C(5,3) = 10。
{1,2,3} 和 {3,2,1} 视为相同。
| 选取个数 (k) | 排列数 P(5,k) | 组合数 C(5,k) | 示例 (排列/组合) |
|---|---|---|---|
| 1 | 5 | 5 | 1,2,3,4,5 |
| 2 | 20 | 10 | (1,2) / {1,2} |
| 3 | 60 | 10 | (2,3,4) / {2,3,4} |
| 4 | 120 | 5 | (1,2,3,4) / {1,2,3,4} |
| 5 | 120 | 1 | (1,2,3,4,5) / {1,2,3,4,5} |
💡 注意:排列数P(5,5)=120,组合数C(5,5)=1。全组合只有一种。
这是典型的排列问题,因为顺序决定不同的数。P(5,3) = 5×4×3 = 60个。百位、十位、个位依次有5、4、3种选择。
这其实是组合问题,C(5,2)=10种。但和可能重复?实际上1+5=6, 2+4=6,所以不同和的个数小于10。但只问“选两个数字”的组合数是10。若问不同和,需要枚举:最小1+2=3,最大4+5=9,和值3,4,5,6,7,8,9共7种。
一个简单记忆:排列“有序”,组合“无序”。比如排队问题用排列,握手问题用组合。计算时排列除以顺序因子就是组合。
可以手动或编程枚举,但篇幅太大。典型如按字典序:12345,12354,12435... 直到54321。学习排列生成算法常用递归或回溯。
假设5个人互相握手,每两人握一次,总的握手次数就是C(5,2)=10。因为握手不分顺序,甲和乙握与乙和甲握相同。
· 概率计算:从1~5随机抽取3个数字,抽到特定组合的概率是 1/C(5,3)=1/10。
· 密码学:5个数字的全排列可作为简单密码空间,120种可能性虽然不大,但结合字母会更安全。
· 算法枚举:回溯法生成排列组合是经典面试题。下面是一个快速生成1~5排列的Python思路:
import itertools
nums = [1,2,3,4,5]
perms = list(itertools.permutations(nums)) # 120种
combs = list(itertools.combinations(nums,3)) # 10种
用Python的itertools可以轻松验证所有排列组合。
从数字1-5出发,理解数学之美