排列
排列是分顺序的,比如集合({1,2,3,4,5})
我们需要选出(3)个数
就是(5*4*3):第一次有五个位置可选,第二次有四个位置可选,第三次有三个位置可选
是与顺序有关的,也就是((1,2,3))和((3,2,1))是有本质上区别的
所以我们有排列公式,一个集合(S),(|S|=n),选(m)个数的排列:
[A_n^m=n!/(n-m)!
]
组合
组合是不分顺序的,还是那个集合
((1,2,3))和((3,2,1))是没有本质上区别的,也就是这时一种方案
我们定义(C_n^m),为一个集合(S),(|S|=n),选(m)个数的组合:
[A_n^m=C_n^m*A_m^mlongrightarrow C_n^m=dfrac{n!}{m!(n-m)!}
]
再来几个性质加深下理解:
-
(sumlimits_{i=0}^nC_i^j=C_{n+1}^{j+1})
理解:枚举(j+1)的右端点(i+1),则相当于从(i)个点中选(j)个点 -
(sumlimits_{i=0}^n C_{n}^i(m-1)^{n-i}=m^n)
理解:把(n)个有区别的小球丢进(m)个有区别的盒子,等同于从(n)个小球里选(i)个,剩下的丢进(m-1)个盒子了
可重集合的全排列
我们在数学上的集合定义是非重集,可信息学里常常又要处理可重集(集合里的元素可重复)
比如集合((1,2,2,3,4,4)),这便是一个可重集
而此时可重集的排列其实也是与选择顺序有关的,但选第二个跟选第三个本质上是相同的
设(|S|)有(k)种数字,分别有(n_1,n_2...n_k)个,求全排列
我们可以形象地理解为:我们留出(n)个空位,每次把一种数字插进去的组合
[egin{aligned}\
ans&=C_n^{n_1}*C_{(n-n_1)}^{n_2}...*C_{(n-n_1-n_2...-n_{k-2})}^{n_{k-1}}*C_{n_k}^{n_k}\
ans&=dfrac{n!}{n_1!n_2!...n_k!}\
end{aligned}]