排列与组合
基本原理
加法原理
{ S 1 , S 2 , ⋯ , S n } \{ S_1 , S_2, \cdots , S_n\} {S1,S2,⋯,Sn} is a partition of S S S then :
∣ S ∣ = ∑ i = 1 n ∣ S i ∣ |S| = \sum_{i=1}^{n} {|S_i |} ∣S∣=i=1∑n∣Si∣
乘法原理
S S S is the set of some ordered pair < a , b > <a,b> <a,b>, if S = { < a , b > ∣ a ∈ P , b ∈ Q } S = \{ <a,b> | a \in P , b \in Q \} S={<a,b>∣a∈P,b∈Q} then:
∣ S ∣ = ∣ P ∣ × ∣ Q ∣ |S| = |P| \times |Q| ∣S∣=∣P∣×∣Q∣
减法原理
S ‾ \overline{S} S is the commplement set of S S S , when U U U is the universal set :
S = ∣ U ∣ − ∣ S ‾ ∣ S = |U| - |\overline{S}| S=∣U∣−∣S∣
除法原理
If there is a k-to-1 correspondence between of objects of type A with objects of type B, and there are ∣ A ∣ |A| ∣A∣ objects of type A, then there are ∣ A ∣ k \frac{|A|}{k} k∣A∣ objects of type B.
基本计数问题
在计数之前需要弄清楚:
- 是否有序
- 是否有标号
- 是否有限制条件
- 有限集还是无限集
- 是否可重
- 尝试一个小例子验证上述问题
排列数
P ( n , r ) P(n,r) P(n,r)表示从 n n n个元素中有序地选择 r r r个元素的方案数。 P ( n , r ) = n ! ( n − r ) ! P(n,r) = \frac{n!}{(n-r)!} P(n,r)=(n−r)!n!
其中循环排列的个数是 P ( n , r ) r \frac{P(n,r)}{r} rP(n,r)。
组合数
( n r ) \binom{n}{r} (rn)表示从 n n n个元素中选择- r r r个元素作为一个集合的方案数(无序)。通常 ( n r ) = n ! r ! ( n − r ) ! \binom{n}{r} = \frac{n!}{r!(n-r)!} (rn)=r!(n−r)!n!
特别的规定 ( 0 0 ) = 1 \binom{0}{0} = 1 (00)=1
二项式系数的特征
二项式定理
组合数又称做二项式系数,这是因为知名的二项式定理
( x + y ) n = ∑ i = 0 n ( n i ) x i y n − i (x+y)^n = \sum_{i=0}^{n} \binom{n}{i} x^i y^{n-i} (x+y)n=i=0∑n(in)xiyn−i
一个特例是: ∑ i = 0 n ( n i ) = 2 n \sum_{i=0}^{n} \binom{n}{i} = 2^n i=0∑n(in)=2n表示组合数的和。
另一个特例是:选择奇数个元素和偶数个元素的方案数一样多 ∑ i = 0 n ( − 1 ) i ( n i ) = 0 \sum_{i=0}^{n} (-1)^{i} \binom{n}{i} = 0 i=0∑n(−1)i(in)=0
比例关系
-
( n r − 1 ) ( n − r + 1 ) = ( n r ) r \binom{n}{r-1} (n-r+1) = \binom{n}{r} r (r−1n)(n−r+1)=(rn)r
这变相的解释了组合数 ( n i ) \binom{n}{i} (in)关于 i i i的最值。
-
( n − 1 r − 1 ) n = ( n r ) r \binom{n-1}{r-1} n = \binom{n}{r} r (r−1n−1)n=(rn)r
Pascal
( n r ) = ( n − 1 r ) + ( n − 1 r − 1 ) \binom{n}{r} = \binom{n-1}{r} + \binom{n-1}{r-1} (rn)=(rn−1)+(r−1n−1)
对称性
( n r ) = ( n n − r ) \binom n r = \binom n {n-r} (rn)=(n−rn)
组合数的和
( n + 1 r + 1 ) = ( n r ) + ( n − 1 r ) + ⋯ + ( r r ) \binom {n+1} {r+1} = \binom n r + \binom {n-1} r + \cdots + \binom r r (r+1n+1)=(rn)+(rn−1)+⋯+(rr)
组合数的卷积(Vandermonde卷积)
( n + m k ) = ∑ i = 0 k ( n i ) ( m k − i ) \binom {n+m} k = \sum_{i=0}^{k} \binom n i \binom m {k-i} (kn+m)=i=0∑k(in)(k−im)
( 2 n n ) = ∑ i = 0 n ( n i ) 2 \binom {2n} n = \sum_{i=0}^{n} {\binom n i}^2 (n2n)=i=0∑n(in)2
二项式反演
利用组合数在两类计数序列中可以建立下述联系
f n = ∑ i = 0 n ( − 1 ) i ( n i ) g i ⇔ g n = ∑ i = 0 n ( − 1 ) i ( n i ) f i f_n = \sum_{i=0}^{n} (-1)^{i} \binom{n}{i} g_i \Leftrightarrow g_n = \sum_{i=0}^{n} (-1)^{i} \binom n i f_i fn=i=0∑n(−1)i(in)gi⇔gn=i=0∑n(−1)i(in)fi
f n = ∑ i = 0 n ( n i ) g i ⇔ g n = ∑ i = 0 n ( − 1 ) n − i ( n i ) f i f_n = \sum_{i=0}^{n} \binom{n}{i} g_i \Leftrightarrow g_n = \sum_{i=0}^{n} (-1)^{n-i} \binom n i f_i fn=i=0∑n(in)gi⇔gn=i=0∑n(−1)n−i(in)fi
一个经典的策略是解决错排问题,假设已知错排数为 D n D_n Dn则有
n ! = ∑ i = 0 n ( n i ) D i n! = \sum_{i=0}^{n} \binom n i D_i n!=i=0∑n(in)Di 即枚举每种排列中错位的位置,并对这些位置错排。
故
D n = ∑ i = 0 n ( − 1 ) n − i ( n i ) i ! = ∑ i = 0 n ( − 1 ) n − i n ! ( n − i ) ! = n ! ∑ i = 0 n ( − 1 ) i i ! \begin{aligned} D_n & = \sum_{i=0}^n (-1)^{n-i} \binom n i i! \\ & = \sum_{i=0}^n (-1)^{n-i} \frac{n!}{(n-i)!} \\ & = n! \sum_{i=0}^{n} \frac{(-1)^i}{i!} \end{aligned} Dn=i=0∑n(−1)n−i(in)i!=i=0∑n(−1)n−i(n−i)!n!=n!i=0∑ni!(−1)i
多重集合排列
问题定义,有 k k k中元素,有序选出其中 r r r个元素的排列数:
- 无限情形 k r k^r kr
- 有限情形,第 i i i中元素有 n i n_i ni个, r = ∑ n i r = \sum {n_i} r=∑ni ,则 r ! n 1 ! n 2 ! ⋯ n k ! \frac{r!}{n_1 ! n_2 ! \cdots n_k !} n1!n2!⋯nk!r!。这同样是把一个集合划分成 k k k个有标号的集合的方案数。
- 有限情形的另一个情况需要生成函数。考虑每种元素对应的如下多项式,若有无限个,对应 f i ( x ) = e x f_i(x) = e^x fi(x)=ex,如果为 k k k个对应 f i ( x ) = ∑ i = 0 k x i i ! f_i(x) = \sum_{i=0}^{k} \frac{x^i}{i!} fi(x)=i=0∑ki!xi,故求 ∏ f i ( x ) \prod f_i(x) ∏fi(x)可以得到其指数生成函数。
多重集合的组合
问题定义,有 k k k中元素,选出其中 r r r个元素的组合数:
- 无限情形 ( r + k − 1 r ) = ( r + k − 1 k − 1 ) \binom {r+k-1} r = \binom {r+k-1}{k-1} (rr+k−1)=(k−1r+k−1)
- 有限情形
{
a
1
⋅
k
1
,
a
2
⋅
k
2
,
⋯
a
n
⋅
k
n
}
\{a_1 \cdot k_1, a_2 \cdot k_2 , \cdots a_n \cdot k_n\}
{a1⋅k1,a2⋅k2,⋯an⋅kn}这样的有穷集合。
- 对于 a i ⋅ k i a_i \cdot k_i ai⋅ki 考虑问题的反面,即不满足此条件的方案数为 A i A_i Ai
- 问题变成 ∣ ⋂ A i ‾ ∣ = ∑ s ′ ∈ 2 A ( − 1 ) ∣ s ′ ∣ s ′ | \bigcap \overline{A_i} | = \sum_{ s' \in 2^A } (-1)^{|s'|} s' ∣⋂Ai∣=s′∈2A∑(−1)∣s′∣s′
- 按照情况枚举所有可能即可。
- 对于有下界的情形,做换元即可。