组合数学(2)

组合数学

上一篇:组合数学(1)

排列与组合进阶篇

 接下来我们介绍一些排列组合的变种。

多重集的排列数 ∣ \mid 多重组合数

 请大家一定要区分多重组合数多重集的组合数 !两者是完全不同的概念!

 多重集是指包含重复元素的广义集合。设 S = { n 1 ⋅ a 1 , n 2 ⋅ a 2 , ⋯   , n k ⋅ a k } S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k \} S={n1a1,n2a2,,nkak}表示由 n 1 n_1 n1 a 1 a_1 a1 n 2 n_2 n2 a 2 a_2 a2 ⋯ \cdots n k n_k nk a k a_k ak组成的多重集, S S S的全排列个数为
n ! ∏ i = 1 k n i ! = n ! n 1 ! n 2 ! ⋯ n k ! \frac{n!}{\prod_{i=1}^{k}{n_i!}}=\frac{n!}{n_1!n_2!\cdots n_k!} i=1kni!n!=n1!n2!nk!n!
 相当于把相同元素的排列数除掉了。具体地,你可以认为你有𝑘 种不一样的球,每种球的个数分别是 n 1 , n 2 , ⋯   , n k n_1,n_2,\cdots,n_k n1,n2,,nk,且 n = n 1 + n 2 + ⋯ + n k n=n_1+n_2+\cdots +n_k n=n1+n2++nk。这 n n n个球的全排列数就是多重集的排列数 。多重集的排列数常被称作多重组合数 。我们可以用多重组合数的符号表示上式:
( n n 1 , n 2 , ⋯   , n k ) = n ! ∏ i = 1 k n i ! \begin{pmatrix}n\\n_1,n_2,\cdots,n_k\end{pmatrix}=\frac{n!}{\prod_{i=1}^{k}{n_i!}} (nn1,n2,,nk)=i=1kni!n!
 可以看出, ( n m ) \begin{pmatrix}n\\m\end{pmatrix} (nm)等价于 ( n m , n − m ) \begin{pmatrix}n\\m,n-m\end{pmatrix} (nm,nm),只不过后者较为繁琐,因而不采用。

多重集的组合数1

 设 S = { n 1 ⋅ a 1 , n 2 ⋅ a 2 , ⋯   , n k ⋅ a k , } S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k, \} S={n1a1,n2a2,,nkak,}表示由 n 1 n_1 n1 a 1 a_1 a1 n 2 n_2 n2 a 2 a_2 a2 ⋯ \cdots n k n_k nk a k a_k ak组成的多重集。那么对于整数 r ( r < n i , ∀ i ∈ [ 1 , k ] ) r(r<n_i,\forall i\in [1,k]) r(r<ni,i[1,k]),从 S S S中选择 r r r个元素组成一个多重集的方案数就是多重集的组合数。这个问题等价于 x 1 + x 2 + ⋯ + x k = r x_1+x_2+\cdots+x_k=r x1+x2++xk=r的非负整数解的数目,可以用插板法解决,答案为
( r + k − 1 k − 1 ) \begin{pmatrix}r+k-1 \\ k-1\end{pmatrix} (r+k1k1)

多重集的组合数2

 考虑这个问题:设 S = { n 1 ⋅ a 1 , n 2 ⋅ a 2 , ⋯   , n k ⋅ a k } S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k \} S={n1a1,n2a2,,nkak}表示由 n 1 n_1 n1 a 1 a_1 a1 n 2 n_2 n2 a 2 a_2 a2 ⋯ \cdots n k n_k nk a k a_k ak 组成的多重集。那么对于正整数 r r r,从 S S S中选择 r r r个元素组成一个多重集的方案数。

 这样就限制了每种元素的取的个数。同样的,我们可以把这个问题转化为带限制的线性方程求解:
∀ i ∈ [ 1 , k ] , x i ≤ n i , ∑ i = 1 k x i = r \forall i\in [1,k],x_i\leq n_i,\sum_{i=1}^{k}{x_i}=r i[1,k],xini,i=1kxi=r
 于是很自然地想到了容斥原理。容斥的模型如下:

​ 1.全集: ∑ i = 1 k x i = r \sum_{i=1}^{k}{x_i}=r i=1kxi=r的非负整数解。

​ 2.属性: x i ≤ n i x_i\leq n_i xini

 于是设满足属性 i i i的集合是 S i S_i Si S ˉ \bar{S} Sˉ表示不满足属性 i i i的集合,即满足 x i ≥ n i + 1 x_i\geq n_i+1 xini+1的集合。那么答案即为:
∣ ⋂ i = 1 k S i ∣ = ∣ U ∣ − ∣ ⋃ i = 1 k S i ˉ ∣ \begin{vmatrix}\bigcap_{i=1}^{k}{S_i} \end{vmatrix}=|U|-\begin{vmatrix}\bigcup_{i=1}^{k}{\bar{S_i}}\end{vmatrix} i=1kSi =U i=1kSiˉ
 根据容斥原理,有:
∣ ⋃ i = 1 k S i ˉ ∣ = ∑ i ∣ S i ˉ ∣ − ∑ i , j ∣ S i ˉ ∩ S j ˉ ∣ + ∑ i , j , k ∣ S i ˉ ∩ S j ˉ ∩ S k ˉ ∣ − ⋯ + ( − 1 ) k − 1 ∣ ⋂ i = 1 k S i ˉ ∣ = ∑ i ( k + r − n i k − 1 ) − ∑ i , j ( k + r − n i − n j − 3 k − 1 ) + ∑ i , j , k ( k + r − n i − n j − 4 k − 1 ) − ⋯ + ( − 1 ) k − 1 ( k + r − ∑ i = 1 k n i − k − 1 k − 1 ) \begin{aligned}\begin{vmatrix}\bigcup_{i=1}^{k}{\bar{S_i}}\end{vmatrix}&=\sum_{i}{|\bar{S_i}|}-\sum_{i,j}{\begin{vmatrix}\bar{S_i}\cap \bar{S_j} \end{vmatrix}}+\sum_{i,j,k}{|\bar{S_i}\cap\bar{S_j}\cap\bar{S_k}|}-\cdots\\&\quad+(-1)^{k-1}\begin{vmatrix}\bigcap_{i=1}^{k}{\bar{S_i}} \end{vmatrix}\\&=\sum_{i}{\begin{pmatrix}k+r-n_i\\k-1\end{pmatrix}}-\sum_{i,j}{\begin{pmatrix}k+r-n_i-n_j-3\\k-1\end{pmatrix}}+\sum_{i,j,k}{\begin{pmatrix}k+r-n_i-n_j-4\\k-1\end{pmatrix}}-\cdots\\&\quad+(-1)^{k-1}\begin{pmatrix}k+r-\sum_{i=1}^{k}{n_i}-k-1\\k-1 \end{pmatrix}\end{aligned} i=1kSiˉ =iSiˉi,j SiˉSjˉ +i,j,kSiˉSjˉSkˉ+(1)k1 i=1kSiˉ =i(k+rnik1)i,j(k+rninj3k1)+i,j,k(k+rninj4k1)+(1)k1(k+ri=1knik1k1)
 拿全集 ∣ U ∣ = ( k + r − 1 k − 1 ) \begin{vmatrix}U\end{vmatrix}=\begin{pmatrix}k+r-1\\k-1\end{pmatrix} U =(k+r1k1)减去上式,得到多重集的几何数
A n s = ∑ p = 0 k ( − 1 ) p ∑ A ( k + r − 1 − ∑ A n A i − p k − 1 ) Ans=\sum_{p=0}^{k}{(-1)^p}\sum_A{\begin{pmatrix}k+r-1-\sum_An_{A_i}-p\\k-1 \end{pmatrix}} Ans=p=0k(1)pA(k+r1AnAipk1)
 其中 A A A是充当枚举子集的作用,满足 ∣ A ∣ = p , A i < A i + 1 |A|=p,A_i<A_{i+1} A=p,Ai<Ai+1

不相邻的排列

1 ∼ n 1\sim n 1n n n n个自然数中选 k k k个,这 k k k个数中任何两个数都不相邻的组合有 ( n − k + 1 k ) \begin{pmatrix}n-k+1\\k\end{pmatrix} (nk+1k)种。

错位排列

 我们把错位排列问题具体化,考虑这样一个问题:
n n n封不同的信,编号分别是 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5,现在要把这五封信放在编号 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5,的信封中,要求信封的编号与信的编号不一样。问有多少种不同的放置方法?
 假设我们考虑到第 n n n个信封,初始时我们暂时把第 n n n封信放在第 n n n个信封中,然后考虑两种情况的递推:

  • 前面 n − 1 n-1 n1个信封全部装错;
  • 前面 n − 1 n-1 n1个信封有一个没装错其余全部装错。

 对于第一种情况,前面 n − 1 n-1 n1个信封全部装错:因为前面 n − 1 n-1 n1个已经全部装错了,所以第 n n n封只需要与前面任一一个位置交换即可,总共有 f ( n − 1 ) × ( n − 1 ) f(n-1)\times (n-1) f(n1)×(n1)种情况。
 对于第二种情况,前面 n − 1 n-1 n1个信封有一个没有装错其余全部装错:考虑这种情况的目的在于,若 n − 1 n-1 n1个信封中如果有一个没装错,那么我们把那个没装错的与 n n n交换,即可得到一个全错位排列情况。
 其他情况,我们不可能通过一次操作来把它变成一个长度为 n n n的错排。
 于是可得错位排列的递推式为 f ( n ) = ( n − 1 ) ( f ( n − 1 ) + f ( n − 2 ) ) f(n)=(n-1)(f(n-1)+f(n-2)) f(n)=(n1)(f(n1)+f(n2))
 错位排列数列的前几项为 0 , 1 , 2 , 9 , 44 , 265 0,1,2,9,44,265 0,1,2,9,44,265

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡沛玮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值