文章目录
组合数学初步
一、两个计数原理
二、排列数与组合数
2.1 排列
如何计算呢?
我们考虑:
对于第一个位置,显然有n种选法,而对于第二个位置,由于第一个位置已经选了一个数字,所以第二个位置我们有n-1种选法,以此类推,到第m个位置有n-m+1种选法。
那么就有:
显然全排列即是把n个元素全部用为排列,总方案数即n的阶乘(n!)。
2.2 组合
2.2.1 定义
如何计算组合数?
它可以从排列数推过来:
显然对于n个元素选m个的情况,组合数的任意一个组合都对应于m!个排列,而每个排列又唯一对应于一个集合。
所以有:
建议做做这位大佬题解里排列组合的例题~
题解的主要内容不重要~
大佬博客
注:
这里引用大佬博客的一个例题:
给出解答:
(3)
第一种思考方法:
两端都不排女生,所以女生只能排中间6个位置,所以有:
A 6 3 A_6^3 A63
再观察男生只能排剩下的5个位置,且是有序的,所以有 A 5 5 A_5^5 A55
所以总方案数为
A 6 3 ∗ A 5 5 = 14400 A_6^3*A_5^5 = 14400 A63∗A55=14400
第二种思考方法:
两端都不排女生,则两端只能排男生,所以有 A 5 2 A_5^2 A52
剩下6个位置可以随便排所以有:
A 5 2 ∗ A 6 6 = 14400 A_5^2*A_6^6 = 14400 A52∗A66=14400
(4)
第一种思考方法:直接干!
首先可以考虑第一个位置排男生,那么其他位置随便排,因为满足了两端不都排女生的条件:则有:
A 5 1 ∗ A 7 7 A_5^1*A_7^7 A51∗A77
然后考虑第一个位置排女生,那么最后一个位置只能排男生,其他位置随便排,所以有:
A 6 6 ∗ A 3 1 ∗ A 5 1 A_6^6*A_3^1*A_5^1 A66∗A31∗A51
再由加法原理:总方案数为 A 5 1 ∗ A 7 7 + A 6 6 ∗ A 3 1 ∗ A 5 1 = 36000 A_5^1*A_7^7+A_6^6*A_3^1*A_5^1 = 36000 A51∗A77+A66∗A31∗A51=36000
第二种思考方法:
考虑全集-A = A的补集(正难则反的思想)
如果说正着考虑不好考虑,那么可以考虑相反的情况的数量,然后以总方案数减去相反情况的数量就是正解。
题目要求两边不都是女生的方案数,不妨设为B,另外设全集为U
那么显然 B = U - 两边都是女生的方案数(设为C)
显然C = A 3 2 ∗ A 6 6 A_3^2*A_6^6 A32∗A66
则 B = A 8 8 − C = A 8 8 − A 3 2 ∗ A 6 6 = 36000 B = A_8^8-C = A_8^8-A_3^2*A_6^6 = 36000 B=A88−C=A88−A32∗A66=36000
以上分析过程是基础,建议反复熟练
2.2.2 常用恒等式
下面给出各式的证明:
2.2.2.1 (1)式的证明
- 从公式出发:
- 从组合数定义出发:
2.2.2.2 (2)式的证明
公式出发即验算一下,这里就不算了。
给出从定义出发的证明:
类似背包问题的转移,
考虑加法原理,从n个元素中,选择m个元素,它可以拆分为下面两种不重合的情况:
[1] 从前n-1个元素中选m个,不选第n个 (总共选了m个)
[2] 从前n-1个元素中选m-1个,选第n个 (总共选了m个)
所以有从n个元素中选m个的方案数显然等于[1]+[2]
2.2.2.3 (3)式的证明
考虑组合意义,等式左边实际含义是n个不重复元素组成的集合的子集个数,而我们知道对于任意一个元素,都分为选和不选两种情况,所以n个元素就有2^n种情况,子集个数就是2^n个
2.2.2.4 (4)式的证明
该式即为二项式定理
2.2.2.5 (5)式的证明
令(4)式的y=-1,x=1即得到(5)式
2.2.3 错排公式
给定n个元素,编号从1~n,问:n个元素的错位排列方案数?
错位排列:每个数字都不在自己位置上的排列。
例如:
1 2 3 4 不是一个错位排列,因为它们都在自己位置上。
4 2 3 1 不是一个错位排列,因为3在自己位置上。
4 3 2 1 是一个错位排列。
方法一:递推求错排公式
递推求错排方案数:
不妨先设n个元素的错位排列方案数为fn
考虑从规模较小的问题构建递推关系:
(1) 首先,考虑从n-1个元素的错位排列构造n个元素的错位排列:
显然只有1~n不满足错位排列的条件(即1,2,…n),而观察发现只要把n和前n-1个元素中任意一个元素交换,都可以满足错位排列的条件。
所以这里的方案数贡献是(n-1)*f(n-1)
(2) 再考虑从n-2个元素的错位排列构造n个元素的错位排列:
那么显然前n-1个元素中只可能有一个元素d不满足错位排列要求,显然只需要把这个元素d和第n个元素交换,那么就可以满足错位排列条件。
这里的方案数贡献是(n-1)*f(n-2)
是否考虑从n-3,n-4…n-(n-1)个元素的错位排列构造呢?
答案是否定的,因为如果从它们开始构造错位排列,无法通过一次交换就构造成错位排列,不满足递推条件,我们递推是从前一次的错位排列通过一次交换后得到的。
例子:
故有:
方法二:容斥原理求错排公式
我们要求n个元素的错排公式,那么就是n个元素每个元素都不能放对的方案数
首先显然有n个元素随便排列的方案数即为n!
然后考虑1个元素放对位置的方案数:1号放对、2号放对…n号放对的方案数即
于是应该用n!减去1个元素放对位置的方案数,
然后发现2个元素放对位置的方案数被多减了一次,于是应该加上2个元素放对位置的方案:
如此进行下去:
最终得到错排公式为:
来一道跟错排公式无关的找性质题吧!
笔者做这道题时往错排公式考虑了,然后开心的WA了两发
P8143
再来一道!
P3197
again!
P5520
三、容斥原理
对于更复杂一些的:
容易知道上述两式是显然的。
未完待续~
参考资料
luogu大佬题解
luogu提高课:组合数学与计数