形式化的组合数学
约定
我们给出一些约定:
\([n]\) 表示集合 \({1,2,3,4,5,...,n}\)。
知识点
加法原理、乘法原理
这些是最基本的知识点了。
加法原理
\(A_1,A_2,A_3,A_{...},A_n\) 均为集合,且满足 \(A_i\cap A_j=\varnothing ,\forall i,j \in [n]\)
\(|\bigcup\limits_{i=1}^nA_i|=\sum\limits_{i=1}^n |A_i|\)
乘法原理
设 \(S=P\times Q={(p,q),p\in P,q\in Q}\)
则 \(|S|=|P||Q|\)
排列
对于 \(a_1,a_2,a_{...},a_n\) 的排列数,可能有相同(我们假定 \(a_i\in [n]\),如果不是这样的话,我们可以弄个映射射到 \([n]\) 上)。
形式化的表达排列,首先定义什么是两个排列相同。考虑一个 \([n]\) 的一一对应 \(p:[n] \to [n]\),如果对于两种排列 \(p1,p2\),我们有 \(a_{p1_i}=a_{p2_i},\forall i\in[n]\),则两种排列 \(p1=p2\)。
注意上面的表述,我们取排列并不是排列 \(a\) 集合,而是去排列一个映射 \(p\) 集合。
首先,解决排列数,如果 \(a_i\not= a_j,\forall i,j\in [n],i \not= j\),那么答案是非常经典的 \(n!\) 种。
但是我们可能 \(a\) 中会有相同元素,那么我们该如何考虑呢?
\(b_i\) 表示 \(i\) 号不重元素出现次数,对于每一个映射 \(p\) 我们均有 \(\prod\limits_{i=1}^nb_i\) 种相同的映射 \(p'\) 所以很简单,我们的答案就是 \(\frac{n!}{\prod\limits_{i=1}^nb_i}\)。