相邻组合问题和分组组合问题
abstract
- 向量组合问题和分组问题
相邻组合问题
捆绑法和插入法
- 在组合数学中,捆绑法和插入法是排列组合的推广,主要用于解决相邻组合与不相邻组合的问题。
例子🎈
-
若有A,B,C,D,E五个人排队,要求A和B两个人必须站在相邻位置,则有多少种排队方法?
- 将A和B两个人捆绑,对(A,B),C,D,E进行排列,
- (A,B)内部排列有 P 2 2 P_2^2 P22种排法,记 X = ( A , B ) X=(A,B) X=(A,B)
- X,C,D,E有 P 4 4 = 4 ! = 24 P_4^4=4!=24 P44=4!=24种排法
- 由乘法原理,共有 S = P 2 2 × P 4 4 S=P_2^2\times P_4^4 S=P22×P44= 48 48 48种
- 将A和B两个人捆绑,对(A,B),C,D,E进行排列,
-
若有A,B,C,D,E五个人排队,要求A和B两个人必须不站在一起,则有多少种排队方法?
-
方法1:使用互补(互斥)法配合捆绑法所有排法减去相邻排法即得不相邻排法, P 5 5 − P 2 2 × P 4 4 = 5 ! − 2 ! 4 ! = 72 P_5^5-P_2^2\times P_4^4=5!-2!4!=72 P55−P22×P44=5!−2!4!=72
-
方法2:使用插空法,将A,B插入安全位置(
$X$Y$Z$
),- 其中X,Y,Z表示可以相邻的 C , D , E C,D,E C,D,E的某一种排列
- 将
A
,
B
A,B
A,B插入
$
所指的位子都能够满足 A , B A,B A,B不相邻的要求 - A , B A,B A,B间又可以产生 A 2 2 A_2^2 A22种排列
- 由乘法原理有 A 3 3 C 4 2 A 2 2 = 6 × 6 × 2 = 72 A_3^3C_4^2A_2^2=6\times{6}\times2=72 A33C42A22=6×6×2=72
-
分组问题
- 排列组合问题通常可以分为两类:
- 如果问题本身是有序的,往往容易直接求解
- 如果问题包含了无序部分,可以先按照有序的做法进行计算,然后再去出重复的倍数即可
- 对于一般的分组问题,将问题细分为2个层次(假设我们要将一批互不相同的元素分配成k个组)
- 一个是元素组队问题(队伍内部元素没有顺序,队伍之间也不区分顺序)
- 另一个是组完队后个组分配到不同目标问题(队伍内部没有顺序,但是队伍之间要区分顺序)
- 其中问题2是我们很熟悉的乘法原理,只需要知道每个组的人数
n
1
,
⋯
,
n
k
n_1,\cdots,n_k
n1,⋯,nk,利用组合数,可得
- 第1个组有 ( n n 1 ) \binom{n}{n_1} (n1n)种组队方法
- 第2个组有 ( n − ∑ j = 1 1 n j n 2 ) \binom{n-\sum_{j=1}^{1}n_j}{n_2} (n2n−∑j=11nj)= ( n − n 1 n 2 ) \binom{n-n_1}{n_2} (n2n−n1)种方法
- ⋮ \vdots ⋮
- 第 i i i个组有 ( n − ∑ j = 0 i − 1 n j n i ) \binom{n-\sum_{j=0}^{i-1}n_j}{n_i} (nin−∑j=0i−1nj)种方法
- 因此给 k k k个组分配元素的方法数是分配各个组方法数的乘积
- 而问题1是队伍间无序的,意味着
S
0
S_0
S0={{1,2},{3,4},{5,6}}和
T
0
T_0
T0={{3,4},{1,2},{5,6}}是同一个分组,不可重复计数
- 在问题1种,元素{1,2}和{3,4}分别去目标 A 1 , A 2 A_1,A_2 A1,A2是一种方法,分别去 A 2 , A 1 A_2,A_1 A2,A1则是另一种方法
- 然而问题2仅考虑组队的方法数,不考虑将组队分配到具体的目标,因此如果直接使用乘法原理和组合数公式,则是将队伍间顺序一同考虑进来,导致重复计数;
- 幸运的是,这种重复是有规律性的,我们可以通过去除重复来从有序解变为所需的无序解
- 将问题2种的结果除以合适的去重因子,即可得到不重复的问题1的答案
- 若某个分组方案中有 r r r个组的组内成员数一样,那么重复因子为 A r r A_{r}^{r} Arr,对于复杂分组,可能有多个重复因子
均匀分组
最简单的均匀分组
- n个人,均分成n个组,有几种分法?
- 显然只有一种分法("每组一个人"这一种分组方法): A n n A n n = 1 \frac{A_n^n}{A_n^n}=1 AnnAnn=1
- 这种计算方法假设n个组之间有顺序之分,再除以重复的倍数得到结果
- n个人,均分成n个组,每组至少一个人,执行n个不同任务有几方法
- A n n A_n^n Ann= ( n 1 ) ⋯ ( 1 1 ) \binom{n}{1}\cdots\binom{1}{1} (1n)⋯(11)
- 6个人,均分为3组,有多少种方法?
- 本问题是一个无序组合问题:
- 分组之间不关系顺序
- 组内成员不关心顺序
- 只关心组内成员的构成
- 本问题是一个无序组合问题:
- 解决无序组合问题可以建立合适的有序排列模型(直接乘法原理)再去序的方式间接解决无序的组合问题
- 设三个组的编号分别为
1
,
2
,
3
1,2,3
1,2,3,并设它们的人员组合分别是
A
1
,
A
2
,
A
3
A_1,A_2,A_3
A1,A2,A3,并且它们是有序的
- 根据组合数计数原理,设6个人编号为1,2,3,4,5,6,从中选两个人组成一组,所有的可能有 ( 6 2 ) \binom{6}{2} (26)= 15 15 15种
- 记所有可能的二人组的集合为 S S S,其中包含15个元素,且 A i ∈ S , i = 1 , 2 , 3 A_i\in{S},i=1,2,3 Ai∈S,i=1,2,3
- 划分第一组两个人时有 ( 6 2 ) \binom{6}{2} (26)种可能,划分第二组时有 ( 4 2 ) \binom{4}{2} (24)种可能,划分第三组时有 ( 2 2 ) \binom{2}{2} (22)种可能
- 根据乘法原理(解决有序排列问题), A 1 , A 2 , A 3 A_1,A_2,A_3 A1,A2,A3这3个组将产生 C 6 2 C 4 2 C 2 2 C_6^2C_4^2C_2^2 C62C42C22种可能
- 例如 A 1 , A 2 , A 3 A_1,A_2,A_3 A1,A2,A3的一种可能的取值是; A 1 A_1 A1={1,2}, A 2 A_2 A2={3,4}, A 3 A_3 A3={5,6},将这个方案记为 S 0 S_0 S0={{1,2},{3,4},{5,6}}
- S 0 S_0 S0中包含的3个二元组元素,它们的排列有 A 3 3 = 6 A_3^3=6 A33=6种,这6种排列应当视为同一种分组方案
- 因此,取出排列组间排列带来的重复计数,需要除以均分的组数的全排列,即 C 6 2 C 4 2 C 2 2 A 3 3 \frac{C_6^2C_4^2C_2^2}{A_3^3} A33C62C42C22= 15 15 15种
- 设三个组的编号分别为
1
,
2
,
3
1,2,3
1,2,3,并设它们的人员组合分别是
A
1
,
A
2
,
A
3
A_1,A_2,A_3
A1,A2,A3,并且它们是有序的
均匀分组问题模型
-
n = k m n=km n=km个元素均分为 k k k组(每组 m m m个),有多少种方法?
-
解:
- ∏ i = 0 k − 1 C n − m i m A k k \frac{\prod_{i=0}^{k-1}{C_{n-mi}^{m}}}{A_k^k} Akk∏i=0k−1Cn−mim
-
例如,6人分3组, k = 3 , m = 6 / 3 = 2 k=3,m=6/3=2 k=3,m=6/3=2
- ∏ i = 0 3 − 1 C 6 − 2 i 2 A 3 3 = C 6 2 C 4 2 C 2 2 6 = 15 \frac{\prod_{i=0}^{3-1}{C_{6-2i}^2}}{A_3^3} =\frac{C_6^2C_4^2C_2^2}{6}=15 A33∏i=03−1C6−2i2=6C62C42C22=15
均匀但组间有序分组模型
- n = k m n=km n=km个元素均分为 k k k组(每组 m m m个),依次分配给任务 A 1 , ⋯ , A n A_1,\cdots,A_n A1,⋯,An,有多少种方法?
- ∏ i = 0 k − 1 C n − m i m \prod_{i=0}^{k-1}{C_{n-mi}^{m}} ∏i=0k−1Cn−mim
不均匀分组
- 将6个人分成3个组,各有
3
,
2
,
1
3,2,1
3,2,1个人,有多少种方法?
- 根据组合数和乘法原理,有 C 6 3 C 3 2 C 1 1 C_6^3C_3^2C_1^1 C63C32C11= 60 60 60
- 由于3个组每个组的人数互不相等,因此不需要去序
局部均匀分组
-
n个元素作局部均匀分组,分为 s s s= p + t p+t p+t个组,其中
-
前 p p p个组的元素数目: n 1 = n 2 = ⋯ = n p n_1=n_2=\cdots=n_p n1=n2=⋯=np= m m m,其余组元素各不相同,不妨设为 r j r_j rj个, m ≠ r j ; j = 1 , 2 , ⋯ , q m\neq{r_j};j=1,2,\cdots,q m=rj;j=1,2,⋯,q
-
均匀部分:
- p p p个元素相同的组有 ∏ i = 0 p − 1 C n − m i m \prod_{i=0}^{p-1}C_{n-mi}^{m} ∏i=0p−1Cn−mim可能,其中包含了一个重复倍数 A p p A_p^p App
-
其他均匀部分:
- 甚于分组可能还包含了一个局部均匀分组问题,递归的做下去,直到剩余的分组(设有 t t t个组)元素数量互不相等
-
严格不均匀部分:
- 后剩余的 t t t个组仍然按照分组和连乘的方式计算,但是不需要除以重复倍数(因为各组的元素数目不同)
-
例
- 10个不同的人,需要分为6个组,其中有3个组每组2个人,另外2组每组1个人;还有一个组2个人: ( C 10 2 C 8 2 C 6 2 ) ( C 4 1 C 3 1 ) C 2 2 A 3 3 A 2 2 \frac{(C_{10}^2C_8^2C_6^2)(C_4^1C_3^1)C_2^2}{A_3^3A_2^2} A33A22(C102C82C62)(C41C31)C22
综合
- 6个人分成3组,每组至少1个人,有多少种分法?
- 分为3类情况
- 6=1+1+4
- 6=1+2+3
- 6=2+2+2
- 第1类是局部均匀分组
- C 6 1 C 5 1 C 4 4 A 2 2 = 15 \frac{C_6^1C_5^1C_4^4}{A_2^2}=15 A22C61C51C44=15
- 第2类是不均匀分组
- C 6 1 C 5 2 C 3 3 C_6^1C_5^2C_3^3 C61C52C33=60
- 第3类是均匀分组:
- C 6 2 C 4 2 C 2 2 A 3 3 \frac{C_6^2C_4^2C_2^2}{A_3^3} A33C62C42C22=15
- 由加法原理合计有 90 90 90种
- 注意和隔板法问题相区别
例题
-
某交通岗有3人,从每周7天中,每天安排1人值班,每人至少值班2天,不同的排法种数(D)?
A:5040
B:1260
C:210
D:630
-
解:由于每个人至少值两天班,我们将7天拆分为 7 = ∑ i = 1 3 x i , x i ⩾ 2 7=\sum_{i=1}^{3}{x_i},x_i\geqslant{2} 7=∑i=13xi,xi⩾2,其中 x i x_i xi是分配给某个值班人员的天数
- 本例中, 7 % 2 = 3 ⋯ 1 7\%2=3\cdots1 7%2=3⋯1,可见7可以分解为 2 + 2 + ( 2 + 1 ) 2+2+(2+1) 2+2+(2+1),即{2,2,3}
- 将7天中的2天分配给员工1有 C 7 2 C_7^2 C72种情况
- 将剩余的 5 5 5天中的2天分配给员工2有 C 5 2 C_5^2 C52种情况
- 将剩余的3天分全部分配给第3个员工有 C 3 3 C_3^3 C33种情况
- 注意到第1个员工和第2个员工分配到的天数是相同的,
- 意味着可以对调两个员工的值班日期从而产生新的安排方法
- 员工1,2,3的值日天数的不同组合可能有
- {2,2,3}
- {2,3,2}
- {3,2,2}
- 上述3种分割方案都可以产生 C 7 2 C 5 2 C 3 3 C_7^2C_5^2C_3^3 C72C52C33种情况(3个集合都属于允许元素重复的特殊集合:多重集)
- 所以共有 3 C 7 2 C 5 2 C 3 3 3C_7^2C_5^2C_3^3 3C72C52C33种方案
- 分割方案还可以不列举出来,仅通过 A 3 3 A 2 2 = 3 \frac{A_3^3}{A_2^2}=3 A22A33=3来计算(不尽相异物)这里将包含{2,2,3}的多重集中的两个2作区别: 2 1 , 2 2 2_1,2_2 21,22
- 2 1 , 2 2 {2_1,2_2} 21,22做排列(有 A 2 2 A_2^2 A22种),不改变多重集,例如{ 2 1 , 2 2 , 3 2_1,2_2,3 21,22,3}={ 2 2 , 2 1 , 3 2_2,2_1,3 22,21,3}
-
C 7 2 C 5 2 C 3 3 A 2 2 A 3 3 \frac{C_{7}^{2}C_{5}^{2}C_3^3}{A_{2}^{2}}A_{3}^{3} A22C72C52C33A33=630
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-07-26 有一串打乱的成绩,现要求你把他们从低到高排列。
2022-07-26 现有一串已按分数高低记录好的成绩, 现在要求你在不打乱原来顺序的基础上 插入一部分数据、删除一部分数据,并输出。