组合数学经常使用的方法主要有计数时的合理分类和组合模型的转换。
文章目录
第 1 章 排列组合
1.1 加法法则与乘法法则
加法法则
设事件 A 有 m 种产生方式,事件 B 有 n 种产生方式,则事件 A 或 B 之一有 m + n 种产生方式。 设事件A有m种产生方式, 事件B有n种产生方式,则事件A或B之一 有m+n种产生方式。 设事件A有m种产生方式,事件B有n种产生方式,则事件A或B之一有m+n种产生方式。
[集合论语言]
若
∣
A
∣
=
m
,
∣
B
∣
=
n
,
A
∩
B
=
∅
,则
∣
A
∪
B
∣
=
m
+
n
若|A|=m,|B|=n,A∩B=\emptyset,则|A∪B|=m+n
若∣A∣=m,∣B∣=n,A∩B=∅,则∣A∪B∣=m+n
[例1] 某班选修企业管理的有 18 人,不选
的有 10 人,则该班共有 18 + 10 = 28 人。
[例2] 北京每天直达上海的客车有 5 次,客机有 3 次, 则每天由北京直达上海的旅行方式有 5 + 3 = 8 种。
乘法法则
设事件
A
有
m
种产生式,事件
B
有
n
种产生方式,则事件
A
与
B
有
m
⋅
n
种产生方式。
设事件A有m种产生式,事件B有n种产生方式,则事件A与B有 m · n种产生方式。
设事件A有m种产生式,事件B有n种产生方式,则事件A与B有m⋅n种产生方式。
[集合论语言]
若
∣
A
∣
=
m
,
∣
B
∣
=
n
,
A
×
B
=
{
(
a
,
b
∣
a
∈
A
,
b
∈
B
)
}
,则
∣
A
×
B
∣
=
m
⋅
n
若|A|=m,|B|=n,A×B=\{(a,b|a\in A,b\in B)\},则|A×B|=m\cdot n
若∣A∣=m,∣B∣=n,A×B={(a,b∣a∈A,b∈B)},则∣A×B∣=m⋅n
[例1] 某种字符串由两个字符组成,第一个字符可选自{a,b,c,d,e},第二个字符可选自{1,2,3},则这种字符串共有5×3 = 15 个。
[例2] 从A到B有三条道路,从B到C有两条道路,则从A经B到C有3×2=6 条道路。
[例3] 某种样式的运动服的着色由底色和装饰条纹的颜色配成。底色可选红、蓝、橙、黄,条纹色可选黑、白,则共有4×2 = 8种着色方案
- 若此例改成底色和条纹都用红、蓝、橙、黄四种颜色的话,则,方案数就不是4 × 4 = 16, 而只有 4 × 3 = 12 种。
这里按照常识解释为,底色和条纹一般不一样,要根据实际要求来解答
- 在乘法法则中要注意事件 A 和 事件 B 的相互独立性
[例4.1] 求小于10000的含1的正整数的个数
∵
\because
∵ 小于10000的不含1的正整数可以看作4位数,但0000除外
∴
\therefore
∴ 有
9
×
9
×
9
×
9
−
1
=
6560
9×9×9×9-1=6560
9×9×9×9−1=6560个,
∴
\therefore
∴ 含1的有:
9999
−
6560
=
3439
9999-6560=3439
9999−6560=3439个
[另外],
∵
\because
∵ 全部四位数有
1
0
4
10^4
104个,不含1的四位数有
9
4
9^4
94个
∴
\therefore
∴ 含1的四位数为两个的差:
1
0
4
−
9
4
=
3439
10^4-9^4=3439
104−94=3439个
[例4.2] 求小于10000的含0的正整数的个数
上述方法(含0和含1)对于该题不可直接套用,0019 含1但不含0
∵
\because
∵ 不含0的1位数有
9
9
9个,2位数有
9
2
9^2
92个,3位数有
9
3
9^3
93个,4位数有
9
4
9^4
94个
又
∵
\because
∵ 不含0小于10000的正整数有
9
+
9
2
+
9
3
+
9
4
=
(
9
5
−
1
)
/
(
9
−
1
)
=
7380
9+9^2+9^3+9^4=(9^5-1)/(9-1)=7380
9+92+93+94=(95−1)/(9−1)=7380个
∴
\therefore
∴ 含0小于10000的正整数有
9999
−
7380
=
2619
9999-7380=2619
9999−7380=2619个
1.2 排列与组合
排列
从 n 个不同的元素中,取 r 个不重复的元素,按次序排列,称为从 n 个中取 r 个的无重排列。 排列的全体组成的集合用 P ( n , r ) 表示。排列的个数用 ∣ P ( n , r ) 表示。当 r = n 时称为全排列。 一般不说可重即无重。可重排列的相应记号为 ∣ P ‾ ( n , r ) , P ‾ ( n , r ) 。 从n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重排列。\\ 排列的全体组成的集合用 P(n,r)表示。排列的个数用|P(n,r)表示。当r=n时称为全排列。\\一般不说可重即无重。可重排列的相应记号为 \overline{|P}(n,r), \overline{P}(n,r)。 从n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重排列。排列的全体组成的集合用P(n,r)表示。排列的个数用∣P(n,r)表示。当r=n时称为全排列。一般不说可重即无重。可重排列的相应记号为∣P(n,r),P(n,r)。
[典例]
从
n
n
n个不同的球中,取出
r
r
r个,放入不同的盒子里,每盒一个。第
1
1
1个盒子有
n
n
n种选择,第
2
2
2个盒子有
n
−
1
n-1
n−1种选择,…,第
r
r
r个有
n
−
r
+
1
n-r+1
n−r+1种选择。
因此有,
P
(
n
,
r
)
=
n
(
n
−
1
)
.
.
.
.
.
.
(
n
−
r
+
1
)
,有时记
[
n
]
r
P(n,r)=n(n-1)......(n-r+1),有时记[n]_r
P(n,r)=n(n−1)......(n−r+1),有时记[n]r
组合
定义从 n 个不同元素中取 r 个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从 n 个中取 r 个的无重组合。 组合的全体组成的集合用 C ( n , r ) 表示,组合的个数用 C ( n , r ) 表示 对应于可重组合有记号 C ‾ ( n , r ) , C ‾ ( n , r ) 。 定义从n个不同元素中取r个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组合。\\ 组合的全体组成的集合用C(n,r)表示,组合的个数用C(n,r)表示\\对应于可重组合有记号\overline{C}(n,r),\overline C(n,r)。 定义从n个不同元素中取r个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组合。组合的全体组成的集合用C(n,r)表示,组合的个数用C(n,r)表示对应于可重组合有记号C(n,r),C(n,r)。
[典例]
若球不同,盒子相同,则是从
n
n
n个中取出
r
r
r个的组合模型。若放入盒子后再将盒子标号区别,则又回到排列模型。每一个组合可有
r
!
r!
r!个标号方案。
因此有,
C
(
n
,
r
)
⋅
r
!
=
P
(
n
,
r
)
C
(
n
,
r
)
=
P
(
n
,
r
)
/
r
!
=
[
n
]
r
/
r
!
=
(
n
r
)
=
n
!
r
!
(
n
−
r
)
!
易见
P
(
n
,
r
)
=
n
r
C(n,r)\cdot{r!}=P(n,r)\\ C(n,r)=P(n,r)/r!=[n]_r/r!=(\begin{matrix} n\\r\end{matrix})=\frac{n!}{r!(n-r)!} \\\ 易见\quad P(n,r)=n^r
C(n,r)⋅r!=P(n,r)C(n,r)=P(n,r)/r!=[n]r/r!=(nr)=r!(n−r)!n! 易见P(n,r)=nr
[例1] 有5本不同的日文书,7本不同的英文书,10本不同的中文书。
1)取2本不同文字的书;
5
×
7
+
5
×
10
+
7
×
10
=
155
5×7+5×10+7×10=155
5×7+5×10+7×10=155
2)取2本相同文字的书;
C
(
5
,
2
)
+
C
(
7
,
2
)
+
C
(
10
,
2
)
=
10
+
21
+
45
=
76
C(5,2)+C(7,2)+C(10,2)=10+21+45=76
C(5,2)+C(7,2)+C(10,2)=10+21+45=76
3)任取两本书
155
+
76
=
231
=
(
5
+
7
+
10
2
)
155+76=231=(\begin{matrix} 5+7+10\\2\end{matrix})
155+76=231=(5+7+102)
[例2] 从[1,300]中取3个不同的数,使这3个数的和能被3整除,有多少种方案?
[提示:先考虑能被3整除的特点,再考虑三个数的和的特点]
将
[
1
,
300
]
分成
3
类:
A
=
{
i
∣
i
≡
1
(
m
o
d
3
)
}
=
{
1
,
4
,
7
,
.
.
.
,
298
}
B
=
{
i
∣
i
≡
2
(
m
o
d
3
)
}
=
{
2
,
5
,
8
,
…
,
299
}
,
C
=
{
i
∣
i
≡
3
(
m
o
d
3
)
}
=
{
3
,
6
,
9
,
…
,
300
}
要满足上述条件,有四种解法:
1
)
3
个数同属于
A
;
2
)
3
个数同属于
B
3
)
3
个数同属于
C
;
4
)
A
,
B
,
C
各取一数
.
∴
共有
3
C
(
100
,
3
)
+
10
0
3
=
485100
+
1000000
=
1485100
将[1,300]分成3类:\\ A=\{i|i≡1(mod3)\}=\{1,4,7,...,298\}\\B=\{i|i≡2(mod 3)\}=\{2,5,8,…,299\},\\C=\{i|i≡3(mod 3)\}=\{3,6,9,…,300\}\\要满足上述条件,有四种解法:\\1)3个数同属于A;\\2)3个数同属于B\\3)3个数同属于C;\\4)A,B,C各取一数.\\ \therefore 共有 3C(100,3)+100^3=485100+1000000=1485100
将[1,300]分成3类:A={i∣i≡1(mod3)}={1,4,7,...,298}B={i∣i≡2(mod3)}={2,5,8,…,299},C={i∣i≡3(mod3)}={3,6,9,…,300}要满足上述条件,有四种解法:1)3个数同属于A;2)3个数同属于B3)3个数同属于C;4)A,B,C各取一数.∴共有3C(100,3)+1003=485100+1000000=1485100
[例3] 某车站有6个入口处,每个入口处每次只能进一人,一组9个人进站的方案有多少?
[建模]
一进站方案表示成:
00011001010100
其中“
0
”表示人,“
1
”表示门框,其中“
0
”是不同元,“
1
”是相同元。
给“
1
”
n
个门只用
n
−
1
个门框。任意进站方案可表示成上面
14
个元素的一个排列。
一进站方案表示成:00011001010100\\其中“0”表示人,“1”表示门框,其中“0”是不同元,“1”是相同元。\\给“1”n个门只用n-1个门框。任意进站方案可表示成上面14个元素的一个排列。
一进站方案表示成:00011001010100其中“0”表示人,“1”表示门框,其中“0”是不同元,“1”是相同元。给“1”n个门只用n−1个门框。任意进站方案可表示成上面14个元素的一个排列。
[解法1]
在
14
个元的排列中先确定门框“
1
”的位置,有
C
(
14
,
5
)
种选择,再确定人的位置,有
9
!
种选择,
因此
C
(
14
,
5
)
⋅
9
!
在14个元的排列中先确定门框“1”的位置,有C(14,5)种选择,再确定人的位置,有9!种选择,\\因此C(14,5)\cdot 9!
在14个元的排列中先确定门框“1”的位置,有C(14,5)种选择,再确定人的位置,有9!种选择,因此C(14,5)⋅9!
[解法2]
把全部选择分解成若干步,使每步宜于计算。不妨设
9
个人编成
1
至
9
号。
1
号有
6
种选择;
2
号除可有
1
号的所有选择外,还可(也必须)选择当与
1
号同一门时在
1
号的前面还是后面,故
2
号有
7
种选择;
3
号的选择方法同
2
号,故共有
8
种。
以此类推,
9
号有
14
种选择。
故所求方案为
[
14
]
9
把全部选择分解成若干步,使每步宜于计算。不妨设9个人编成1至9号。\\1号有6种选择;\\2号除可有1号的所有选择外,还可(也必须)选择当与1号同一门时在1号的前面还是后面,故2号有7种选择;\\3号的选择方法同2号,故共有8种。\\以此类推,9号有14种选择。\\故所求方案为[14]_9
把全部选择分解成若干步,使每步宜于计算。不妨设9个人编成1至9号。1号有6种选择;2号除可有1号的所有选择外,还可(也必须)选择当与1号同一门时在1号的前面还是后面,故2号有7种选择;3号的选择方法同2号,故共有8种。以此类推,9号有14种选择。故所求方案为[14]9
1.3 模型转换
- “一 一对应”概念是一个在计数中极为基本的概念。一 一对应既是单射又是满射。
- 如我们说A集合有n个元素 |A|=n,无非是建立了将A中元与[1,n]元一 一对应的关系。
- 在组合计数时往往借助于一 一对应实现模型转换。
- 比如要对A集合计数,但直接计数有困难,于是可设法构造一易于计数的B,使得A与B一 一对应。
[例1] 简单格路问题
∣
(
0
,
0
)
→
(
m
,
n
)
∣
=
(
m
+
n
n
)
|(0,0)\rightarrow(m,n)|=(\begin{matrix} m+n\\n\end{matrix})
∣(0,0)→(m,n)∣=(m+nn)。从 (0,0)点出发沿x轴或y轴的正方向每步走一个单位,最终走到(m,n)点,有多少条路径?
[建模]
- 无论怎样走法,在 x x x方向上总共走 m m m步,在 y y y方向上总共走 n n n步。若用一个 x x x表示 x x x方向上的一步,一个字母 y y y表示 y y y方向上的一步。
- 则 ( 0 , 0 ) → ( m , n ) (0,0)→(m,n) (0,0)→(m,n)的每一条路径可表示为 m m m个 x x x与 n n n个 y y y的一个有重排列。将每一个有重排列的 x x x与 y y y分别编号,可得 m ! n ! m!n! m!n!个 m + n m+n m+n元的无重全排列。
- 设所求方案数为 P ( m + n ; m , n ) P(m+n;m,n) P(m+n;m,n)
- 则 P ( m + n ; m , n ) ⋅ m ! ⋅ n ! = ( m + n ) ! P(m+n;m,n)·m!·n!=(m+n)! P(m+n;m,n)⋅m!⋅n!=(m+n)!
- 故 P ( m + n ; m , n ) ⋅ m ! ⋅ n ! = ( m + n ) ! m ! n ! = ( m + n m ) = ( m + n n ) = C ( m + n , m ) P(m+n;m,n)·m!·n!=\frac{(m+n)!}{m!n!}=(\begin{matrix} m+n\\m\end{matrix})=(\begin{matrix} m+n\\n\end{matrix})=C(m+n,m) P(m+n;m,n)⋅m!⋅n!=m!n!(m+n)!=(m+nm)=(m+nn)=C(m+n,m)
- 设 c ≥ a , d ≥ b c\ge{a} , d\ge{b} c≥a,d≥b,则由 ( a , b ) (a,b) (a,b)到 ( c , d ) (c,d) (c,d)的简单格路数为 ∣ ( a , b ) ( c , d ) ∣ = ( ( c − a ) + ( d − b ) c − a ) |(a,b)(c,d)|=(\begin{matrix} (c-a)+(d-b)\\c-a\end{matrix}) ∣(a,b)(c,d)∣=((c−a)+(d−b)c−a)
[例2] 在例1的基础上若设 m < n m<n m<n,求(0,1)点到(m,n)点不接触对角线 x = y x=y x=y的格路数目(“接触”包括“穿过”)
- 从(0,1)点到(m,n)点的格路,有的接触 x = y x=y x=y,有的不接触
- 对每一条接触
x
=
y
x=y
x=y的格路,做(0,1)点到第一个接触点部分关于
x
=
y
x=y
x=y的对称格路,这样得到一条从(1,0)到(m,n)的格路。
- 容易看出从(0,1)到(m,n)接触 x = y x=y x=y的格路与(1,0)到(m,n)的格路(必穿过x=y)一 一对应
- 因此所求格路数为
(
m
+
n
−
1
m
)
−
(
m
+
n
−
1
m
−
1
)
(\begin{matrix} m+n-1\\m\end{matrix})-(\begin{matrix} m+n-1\\m-1\end{matrix})
(m+n−1m)−(m+n−1m−1)
- 若条件改为可接触但不可穿过,则限制线要向下或向右移一格,得 x - y = 1 x-y=1 x-y=1,(0,0)关于 x − y = 1 x-y=1 x−y=1的对称点为(1,-1).
- 所求格路数为 所求格路数为 ( m + n m ) − ( m + n m − 1 ) = ( m + n ) ! m ! n ! − ( m + n ) ! ( m − 1 ) ! ( n + 1 ) ! = n + 1 − m n + 1 ( m + n m ) (\begin{matrix} m+n\\m\end{matrix})-(\begin{matrix} m+n\\m-1\end{matrix})=\frac{(m+n)!}{m!n!}-\frac{(m+n)!}{(m-1)!(n+1)!}=\frac{n+1-m}{n+1}(\begin{matrix} m+n\\m\end{matrix}) (m+nm)−(m+nm−1)=m!n!(m+n)!−(m−1)!(n+1)!(m+n)!=n+1n+1−m(m+nm)
[例3] 在100名选手之间进行淘汰赛(即一场的比赛结果,失败者退出比赛),最后产生一名冠军,问要举行几场比赛?
- 一种常见的思路是按轮计场,费事。
- 另一种思路是淘汰的选手与比赛(按场计)集一一对应。
- 共用99个失败者,99场比赛。
[例4] CnH2n+2是碳氢化合物,随着n的不同有下列不同的枝链:
这说明对应CnH2n+2的枝链是有3n+2个顶点的一棵树,其中n个顶点与之关联的边数为4;其它2n+2个顶点是叶子。对于这样结构的每一棵树,就对应有一种特定的化合物。从而可以通过研究具有上述性质的树找到不同的碳氢化合物CnH2n+2
Cayley定理 n个有标号的顶点的树的数目等于nn-2 。
生长点不是叶子,每个生长点是[1,n]中的任一元有n种选择。两个顶点的树是唯一的。
[证明]
由一棵
n
个顶点的树可得到一个长度为
n
-
2
的序列
∗
,且不同的树对应的序列不同,因此
∣
T
∣
≤
n
n
−
2
。
对
n
用归纳法可证
反之,由一个长度为
n
-
2
的序列
(
每个元素为
1
n
的一个整数
)
,可得到一棵树,且不同的序列对应的树是不同的,因此
n
n
−
2
≤
∣
T
∣
∣
T
∣
=
n
n
−
2
由一棵n个顶点的树可得到一个长度为n-2的序列* ,且不同的树对应的序列不同,因此 | T |≤ n^{n-2}。\\对n用归纳法可证\\反之,由一个长度为n-2的序列(每个元素为1~ n 的一个整数),可得到一棵树,且不同的序列对应的树是不同的,因此 \\ n^{n-2} ≤| T |\\| T | = n^{n-2}
由一棵n个顶点的树可得到一个长度为n-2的序列∗,且不同的树对应的序列不同,因此∣T∣≤nn−2。对n用归纳法可证反之,由一个长度为n-2的序列(每个元素为1 n的一个整数),可得到一棵树,且不同的序列对应的树是不同的,因此nn−2≤∣T∣∣T∣=nn−2
[例5] 给定一棵有标号的树
边上的标号表示摘去叶的顺序。(摘去一个叶子相应去掉一条边)
由树形成序列
- 逐个摘去标号最小的叶子,叶子的相邻顶点(不是叶子,是内点)形成一个序列,序列的长度为n-2
- 第一次摘掉②,③为②相邻的顶点,得到序列的第一个数
3
- 第二次摘掉③,①为③相邻的顶点,得到序列的第二个数
1
- 第三次摘掉④,⑤为④相邻的顶点,得到序列的第三个数
5
- 第四次摘掉⑥,⑤为⑥相邻的顶点,得到序列的第四个数
5
- 第五次摘掉⑤,①为⑤相邻的顶点,得到序列的第五个数
1
- 第一次摘掉②,③为②相邻的顶点,得到序列的第一个数
- 得到序列
31551
,长度为7-2 = 5这是由树形成序列的过程。
由序列形成树
- 由序列
31551
得到一个新序列111233455567 - 生成的过程
- 首先将
31551
排序得到11355
- 因为序列
31551
的长度为5,得到按升序排序的序列1234567,序列的长度为5+2(即n+2)
- 然后将11355按照大小插入到序列1234567中,
得到111233455567
- 首先将
- 将两个序列排在一起
(
31551
111233455567
)
(\begin{matrix} 31551 \\111233455567\end{matrix})
(31551111233455567)
- 第一步,将上下两个序列同时去掉上行序列的第一个元素3,去掉下行序列的第一个无重复的元素2,生成一条边( ② → ③ ②\rightarrow ③ ②→③)
- 依此类推,减到下面剩最后两个元素,这两个元素形成最后一条边。最后形成树。
- 可以理解成先去掉下行序列第一个无重复元素,然后去掉上行序列中的元素 [没有先后顺序]
算法描述
给定序列
b
=
(
b
1
b
2
…
b
n
−
2
)
b=(b_1b_2…b_{n-2})
b=(b1b2…bn−2),设
a
=
(
123
…
n
−
1
n
)
a=(123…n-1\quad n)
a=(123…n−1n)将b的各位插入
a
a
a,得
a
′
a'
a′,对
(
b
a
′
)
(\begin{matrix} b\\a'\end{matrix})
(ba′)做操作。
[
a
′
a'
a′是
2
n
−
2
2n-2
2n−2个元的可重非减序列。]
操作是从
a
′
a'
a′中去掉最小无重元,设为a1,再从b和a’中各去掉一个b中的第一个元素,设为b1,则无序对
(
a
1
,
b
1
)
(a_1,b_1)
(a1,b1)是一条边。重复这一操作,得n-2条边,最后
a
′
a'
a′中还剩一条边,共 n-1条边,正好构成一个树。b中每去掉一个元,
a
′
a'
a′中去掉2个元。
- 由算法知由树T得 b = ( b 1 b 2 … b n − 2 ) b=(b_1b_2…b_{n-2}) b=(b1b2…bn−2) ,反之,由b可得T。即 f : T → b f:T→b f:T→b是一 一对应。
- 由序列确定的长边过程是不会形成回路的。因任意长出的边 (u , v) 若属于某回路,此回路中必有一条最早生成的边,不妨就设为 (u , v) ,必须使u,v都在长出的边中重复出现,但照算法u,v之一从下行消失,不妨设为u,从而不可能再生成与u有关的边了,故由 ( b a ′ ) (\begin{matrix} b\\a'\end{matrix}) (ba′)得到的边必构成一个n个顶点的树。
1.4 全排列的生成算法
全排列的生成算法就是对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来。
字典序法
对给定的字符集中的字符规定了一个先后关系,在此基础上规定两个全排列的先后是从左到右逐个比较对应的字符的先后。
[例1] 字符集
1
,
2
,
3
{1,2,3}
1,2,3,较小的数字较先,这样按字典序生成的全排列是:
123,132,213,231,312,321。
※※ 一个全排列可看做一个字符串,字符串可有前缀、后缀。
生成给定全排列的下一个排列
生成给定全排列的下一个排列
所谓一个的下一个就是这一个与下一个之间没有其他的。这就要求这一个与下一个有尽可能长的共同前缀,也即变化限制在尽可能短的后缀上。
[例2] 839647521
是1–9的排列。1—9的排列最前面的是123456789
,最后面的是987654321
,从右向左扫描若都是增的,就到了987654321
,也就没有下一个了。否则找出第一次出现下降的位置。
[例3] 求 8396 8396 83964 7521 7521 7521 的下一个排列
7 5 2 1
1.在后缀7521
中找出比4
大的数7 5
2.找出其中比4
大的最小数5
3.4、5
对换
8396
8396
83965
7
7
74
21
21
21
4.将此后缀7421
翻转,接上前缀83965
得到 [例3] 要求的下一个排列
8396
8396
83965
1247
1247
1247
在 [ 1 , n ] 的全排列中 , n n − 1...3 2 1 是最后一个排列,其中介数是 ( n − 1 , n − 2 , . . . , 3 , 2 , 1 ) 其序号为 ∑ k = 1 n − 1 k × k ! 另一方面可直接看出其序号为 n ! − 1 于是 n ! − 1 = ∑ k = 1 n − 1 k × k ! 即 n ! = ∑ k = 1 n − 1 k × k ! + 1 在[1,n]的全排列中,n\quad n-1 ...3\quad2\quad1是最后一个排列,其中介数是(n-1,n-2,...,3,2,1)其序号为\sum_{k=1}^{n-1}{k×k!}\\另一方面可直接看出其序号为n!-1\\于是n!-1=\sum_{k=1}^{n-1}{k×k!}即n!=\sum_{k=1}^{n-1}{k×k!}+1 在[1,n]的全排列中,nn−1...321是最后一个排列,其中介数是(n−1,n−2,...,3,2,1)其序号为∑k=1n−1k×k!另一方面可直接看出其序号为n!−1于是n!−1=∑k=1n−1k×k!即n!=∑k=1n−1k×k!+1
一般而言,设 P 是 [ 1 , n ] 的一个全排列。 P = P 1 P 2 . . . P n = P 1 P 2 . . . P j P j + 1 . . . P k − 1 P k P k + 1 . . . P n j = m a x { i ∣ P i < P i + 1 } , k = m a x { i ∣ P i > P j } 对换 P j , P k , 将 P j + 1 . . . P k − 1 P j P k + 1 . . . P n 翻转 P ′ = P 1 P 2 . . . P j − 1 P k P n . . . P k + 1 P j P k − 1 . . . P j + 1 即 P 的下一个 一般而言,设P是[1,n]的一个全排列。\\P=P_1P_2...P_n=P_1P_2...P_jP_{j+1}...P_{k-1}P_kP_{k+1}...P_n\\j=max\{i|P_i<P_{i+1}\},k=max\{i|P_i>P_j\}\\对换P_j,P_k,将P_{j+1}...P_{k-1}P_jP_{k+1}...P_n翻转\\P'=P_1P_2...P_{j-1}P_kP_n...P_{k+1}P_jP_{k-1}...P_{j+1}即P的下一个 一般而言,设P是[1,n]的一个全排列。P=P1P2...Pn=P1P2...PjPj+1...Pk−1PkPk+1...Pnj=max{i∣Pi<Pi+1},k=max{i∣Pi>Pj}对换Pj,Pk,将Pj+1...Pk−1PjPk+1...Pn翻转P′=P1P2...Pj−1PkPn...Pk+1PjPk−1...Pj+1即P的下一个
计算给定排列的序号
839647521
的序号即先于此排列的排列的个数。
将先于此排列的排列按前缀分类。
前缀先于8的排列的个数: 7 × 8 ! 7×8! 7×8!
第1位是8,先于83的排列的个数:
2
×
7
!
2×7!
2×7!
前2位是83,先于839的排列的个数:
6
×
6
!
6×6!
6×6!
前3位是839的,先于8396的排列个数:
4
×
5
!
4×5!
4×5!
前4位是8396,先于83964的的排列个数:
2
×
4
!
2×4!
2×4!
前5位是83964的,先于839647的排列个数:
3
×
3
!
3×3!
3×3!
前6位是839647,先于8396475的排列个数:
2
×
2
!
2×2!
2×2!
前7位是8396475,先于83964752的排列的个数:
1
×
1
!
1×1!
1×1!
前8位固定,则最后一位也随之固定。
先于此排列的排列的个数:
7
×
8
!
+
2
×
7
!
+
6
×
6
!
+
4
×
5
!
+
2
×
4
!
+
3
×
3
!
+
2
×
2
!
+
1
×
1
!
=
297191
7×8!+2×7!+6×6!+4×5!+2×4!+3×3!+2×2!+1×1!=297191
7×8!+2×7!+6×6!+4×5!+2×4!+3×3!+2×2!+1×1!=297191
将
8
!
,
7
!
,
.
.
.
,
1
!
8!,7!,...,1!
8!,7!,...,1!前面的系数抽出,放在一起得到72642321
该数是计算排列839647521
的序号的中间环节,称之为中介数
一般而言 , 对于 [ 1 , 9 ] 的全排列中介数首位的取值为 0 — 8 ,第 2 位的取值为 0 — 7 ,以此类推,第 8 位的取值为 0 、 1 。从而序号可表示为: ∑ i = 1 n − 1 k i ( n − i ) k i : P i 的右边比 P i 小的数的个数 i = 1 , 2 , … , n − 1 一般而言,对于[1,9]的全排列中介数首位的取值为0—8,第2位的取值为0—7,以此类推,第8位的取值为0、1。从而序号可表示为:\\ \sum{i=1}^{n-1}{k_i(n-i)}\\k_i:P_i的右边比P_i小的数的个数\\i=1,2,…,n-1 一般而言,对于[1,9]的全排列中介数首位的取值为0—8,第2位的取值为0—7,以此类推,第8位的取值为0、1。从而序号可表示为:∑i=1n−1ki(n−i)ki:Pi的右边比Pi小的数的个数i=1,2,…,n−1
由中介数推出排列的算法
[例] 由72642321推出839647521
[方法1]
P
1
P
2
P
3
P
4
P
5
P
6
P
7
P
8
P
9
P_1\quad P_2\quad P_3\quad P_4\quad P_5\quad P_6\quad P_7\quad P_8 \quad P_9
P1P2P3P4P5P6P7P8P9
7
+
1
=
8
→
P
1
=
8
2
+
1
=
3
→
P
2
=
3
6
+
1
=
7
,
但
3
已在
P
3
左边出现,
7
+
1
=
8
,
但
8
已在
P
3
左边出现,
8
+
1
=
9
→
P
3
=
9
4
+
1
=
5
,
但
3
已在
P
4
左边出现
,
5
+
1
=
6
→
P
4
=
6
2
+
1
=
3
,
但
3
已在
P
5
左边出现
,
3
+
1
=
4
→
P
5
=
4
3
+
1
=
4
,但
3
,
4
已在
P
6
左边出现
,
4
+
1
+
1
=
6
,
但
6
已在
P
6
左边出现
,
6
+
1
=
7
→
P
6
=
7
2
+
1
=
3
,
但
3
已在
P
7
左边出现
,
3
+
1
=
4
,
但
4
已在
P
7
左边出现
,
4
+
1
=
5
→
P
7
=
5
1
+
1
=
2
→
P
8
=
2
→
P
9
=
1
7+1=8\rightarrow P_1=8\\2+1=3\rightarrow P_2=3\\6+1=7,但3已在P_3左边出现,\\7+1=8,但8已在P_3左边出现,\\8+1=9\rightarrow P_3=9\\4+1=5,但3已在P_4左边出现,\\5+1=6\rightarrow P_4=6\\2+1=3,但3已在P_5左边出现,\\3+1=4\rightarrow P_5=4\\3+1=4,但3,4已在P_6左边出现,\\4+1+1=6,但6已在P_6左边出现,\\6+1=7\rightarrow P_6=7\\2+1=3,但3已在P_7左边出现,\\3+1=4,但4已在P_7左边出现,\\4+1=5\rightarrow P_7=5\\1+1=2\rightarrow P_8=2\\\rightarrow P_9=1
7+1=8→P1=82+1=3→P2=36+1=7,但3已在P3左边出现,7+1=8,但8已在P3左边出现,8+1=9→P3=94+1=5,但3已在P4左边出现,5+1=6→P4=62+1=3,但3已在P5左边出现,3+1=4→P5=43+1=4,但3,4已在P6左边出现,4+1+1=6,但6已在P6左边出现,6+1=7→P6=72+1=3,但3已在P7左边出现,3+1=4,但4已在P7左边出现,4+1=5→P7=51+1=2→P8=2→P9=1
[方法2]
72642321中未出现
0
,
1
0,1
0,1在最右边
中介数右端加一个
0
0
0扩成
9
9
9位,先定
1
1
1,每定一位,其左边未定位下加一点,从(位-位下点数=0)的位中选最左的。
定1的位置
定2的位置
定3的位置
定4的位置
定5的位置
定6的位置
定7的位置
定8的位置
定9的位置
第 2 章 母函数与递归关系
[引例] 假定这个数列是 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , … . , 2, 3, 5, 7, 11, 13, 17, 19, 23, …., 2,3,5,7,11,13,17,19,23,…., 此处 a n a_n an是第 n n n个素数. 这样的情况, 期望任何简单的公式都是不合理的。
母函数把数列的所有成员用一种非常巧妙的方法联系在一起, 虽然这样做并不一定能得到数列的简单公式, 可是也许能够给出一个幂级数和的简单公式, 展开这个和函数, 所得到的幂级数的系数就是我们所要找的数列。
2.1 母函数概念
- 设有 a , b , c a, b, c a,b,c三个不同的球, 从中选取一个, 或选 a a a, 或选 b b b, 或选 c c c, 把这些可能的选取形象地表示为 a + b + c a+b+c a+b+c.
- 类似地, 从中选取二个, 或选 a a a和 b b b, 或选 a a a和 c c c, 或选 b b b和 c c c. 可形象地表示为 a b + a c + b c ab+ac+bc ab+ac+bc, 同样, 从中选取三个, 只有一种方法, 也可形象地表示为 a b c abc abc
- 从多项式
(
1
+
a
x
)
(
1
+
b
x
)
(
1
+
c
x
)
=
1
+
(
a
+
b
+
c
)
x
+
(
a
b
+
a
c
+
b
c
)
x
2
+
(
a
b
c
)
x
3
(1+ax)(1+bx)(1+cx)=1+(a+b+c)x+(ab+ac+bc)x^2+(abc)x^3
(1+ax)(1+bx)(1+cx)=1+(a+b+c)x+(ab+ac+bc)x2+(abc)x3
(式3.1)
中发现, 所有这些可能的选取方式正好是 x x x幂的系数. 其中 x i x^i xi的系数是从三个球中选取 i 个 i个 i个的方法之形象表示 - 因子
(
1
+
a
x
)
(1+ax)
(1+ax)形象地指出, 对球
a
, 有两种选取方法: 不选a
, 或选a
。 因子 ( 1 + a x ) (1+ax) (1+ax)中的 1 1 1表示不选a
, 而 x x x的系数a
表示选a
. - 既然在上述多项式中,
x
i
x^i
xi的系数表明选取
i
个球的方法, 那么
( 1 + a x ) ( 1 + b x ) ( 1 + c x ) (1+ax)(1+bx)(1+cx) (1+ax)(1+bx)(1+cx)
所表明的是: 对a
,b
,c
三球, 选取的方法是, “选a
或不选a
”和“选b
或不选b
”以及“选c
或不选c
”。 - 多项式中 x x x的幂次表示选取球的个数, 而其相应系数表示一切可能的选取方法
- 如果我们只关心不同组合方案的数目, 不关心各种方案的罗列. 可以在
(3.1)式
中令 a = b = c = 1 a=b=c=1 a=b=c=1, 则得到
( 1 + x ) 3 = C ( 3 , 0 ) + C ( 3 , 1 ) x + C ( 3 , 2 ) x 2 + C ( 3 , 3 ) x 3 = 1 + 3 x + 3 x 2 + x 3 (1+x)^3 = C(3,0)+C(3,1)x +C(3,2)x^2+C(3,3)x^3 =1+3x+3x^2+x^3 (1+x)3=C(3,0)+C(3,1)x+C(3,2)x2+C(3,3)x3=1+3x+3x2+x3 - 总方案数 N = C ( 3 , 0 ) + C ( 3 , 1 ) + C ( 3 , 2 ) + C ( 3 , 3 ) = 1 + 3 + 3 + 1 = 8 N=C(3,0)+C(3,1)+C(3,2)+C(3,3)=1+3+3+1=8 N=C(3,0)+C(3,1)+C(3,2)+C(3,3)=1+3+3+1=8
2.2 母函数定义
[定义3.1]
利用给定序列
a
0
,
a
1
,
a
2
,
,
.
.
.
所构造的函数
利用给定序列a_0,a_1,a2,,...所构造的函数
利用给定序列a0,a1,a2,,...所构造的函数
F
(
x
)
=
a
0
+
a
1
x
+
a
2
x
2
+
.
.
.
F(x)=a_0+a_1x+a_2x^2+...
F(x)=a0+a1x+a2x2+...
称之为序列
a
0
,
a
1
,
a
2
,
.
.
.
的母函数
称之为序列a_0,a_1,a_2,...的母函数
称之为序列a0,a1,a2,...的母函数
母函数定义中的级数是形式幂级数, 不必关心收敛性,
x
x
x只是一个形式变量.
2.3 母函数的运算
常用公式
[例1]
设
F
(
x
)
=
1
+
x
+
x
2
+
.
.
.
,
G
(
x
)
=
1
−
x
,
由定义可以得到
F
(
x
)
G
(
x
)
=
1
,
因此
1
G
(
x
)
=
G
−
1
(
x
)
=
F
(
x
)
,
即
设F(x)= 1+x+x^2+..., G(x)=1-x, 由定义可以得到 F(x)G(x)=1,因此\frac{1}{G(x)}= G^{-1}(x)=F(x), 即
设F(x)=1+x+x2+...,G(x)=1−x,由定义可以得到F(x)G(x)=1,因此G(x)1=G−1(x)=F(x),即
1
1
−
x
=
1
+
x
+
x
2
+
.
.
.
\frac{1}{1-x}=1+x+x^2+...
1−x1=1+x+x2+...
[例2]
2.4 母函数解决计数问题
- 为求 ∣ A n ∣ = a n |A_n|=a_n ∣An∣=an,分两步
- 由 A n A_n An的组合意义,求出 a n a_n an的母函数 f ( x ) f(x) f(x)
- 母函数 f ( x ) f(x) f(x)展开,求出 a n a_n an的表达式
[例1] 丢掷四颗骰子,求出现的点数和为
15
15
15的丢掷结果的种数
[例2] 有
1
1
1分、
2
2
2分、
4
4
4分,…,
2
p
2p
2p分的硬币,问一张n分的纸币兑换硬币,有几种兑换方法?
[例3]
r
r
r个没有区别的球,分放到
n
n
n个不同的盒子,求分放种数
a
r
a_r
ar
[例4]
r
r
r个没有区别的球,分放到
n
n
n个不同的盒子,要求每盒不空,求分放种数
a
r
a_r
ar. 其中
r
≥
n
r≥n
r≥n。
2.5 母函数与递归关系
[例1] (Hanoi塔问题):
n
n
n个圆盘依其半径大小, 从下而上套在柱
A
A
A上, 如图所示. 每次只允许取一个转移到柱
B
B
B或
C
C
C上, 而且不允许大盘放在小盘上方. 若要求把
A
A
A上的
n
n
n个盘转移到
C
C
C柱上. 请设计一种方法, 并估计要移动几个盘次. 现在只有
A
,
B
,
C
A, B, C
A,B,C三根柱子可供使用。
算法设计
[示例]
- n = 2 n=2 n=2,圆盘1从A套在B上;把圆盘2从A转移到C;把圆盘1从B转移到C上,完毕.
- n = 3 n=3 n=3,把圆盘1从A转移到C上;把圆盘2从A转移到B上;把圆盘3从A套在C上;把圆盘1从B在转移到A上;把圆盘2从B转移到C上,把圆盘1从A套在C上,完毕.
[设计]
- 假定 n − 1 n-1 n−1个盘子的转移算法已经确定.
- 对 n n n个圆盘问题, 先把上面的圆盘 1 , 2 , … , n − 1 1,2,…, n-1 1,2,…,n−1转移到B上, 再把最后一个盘子转移到C上, 然后把B上的 n − 1 n-1 n−1个圆盘转移到柱C上. 转移完毕.
- 这运用的是递归算法
n
=
2
n=2
n=2时给出了算法;
n
=
3
n=3
n=3时先利用
n
=
2
n=2
n=2时的算法把圆盘1, 2移B上; 再把圆盘3转移到柱C上;再利用
n
=
2
n=2
n=2时的算法把B上两个圆盘转移到柱C上. n=4,5,…以此类推.
[对于n=3的情况下,n=2答案重复使用了两次]
算法分析
令 h n h_n hn表示 n n n个圆盘所需要的转移次数. 根据算法先把前面 n − 1 n-1 n−1个盘子转移到B上; 然后把第 n n n个盘子转移到C上; 最后再一次将B上的 n − 1 n-1 n−1个盘子转到C上.
- 算法可实现性可用归纳法得到. 因 n = 2 n=2 n=2时成立, 假定 n − 1 n-1 n−1成立, 那么n自然也成立.
- 关于转移次数容易得到一个递归关系:
h n = 2 h n − 1 + 1 , h 1 = 1 h_n=2h_{n-1}+1 , h_1=1 hn=2hn−1+1,h1=1
[方法1] 归纳法
计算这个数列前几项:
1
,
3
,
7
,
15
,
31
,
…
1, 3, 7, 15, 31, …
1,3,7,15,31,…
看起来有点象
h
n
=
2
n
−
1
,
n
=
1
,
2
,
…
h_n=2^n-1, n=1,2,…
hn=2n−1,n=1,2,…
根据递归关系(3.3)用归纳法即可证之.
[方法2] 母函数法
令
H
(
x
)
=
h
1
x
+
h
2
x
2
+
h
3
x
3
+
.
.
.
H(x)=h_1x+h_2x^2+h_3x^3+...
H(x)=h1x+h2x2+h3x3+...
- H(x)是序列 h 1 , h 2 , h 3 , . . . h_1, h_2, h_3, ... h1,h2,h3,...的母函数.
- 给出了序列,就可确定对应的母函数.反过来也一样, 求得了母函数, 对应的序列也就可得而知.
- 给递推关系式
h
n
=
2
h
n
−
1
+
1
h_n=2h_{n-1}+1
hn=2hn−1+1两边同乘
x
n
x^n
xn,然后分别对
n
=
1
,
2
,
…
n=1,2,…
n=1,2,…求和 (约定
h
0
=
0
h_0=0
h0=0):
L = h 1 x + h 2 x 2 + h 3 x 3 + h 4 x 4 + . . . = H ( x ) R = ( 2 h 1 x 2 + 2 h 2 x 3 + . . . ) + ( x + x 2 + … ) = 2 x H ( x ) + x 1 − x L=h_1x+h_2x^2+h_3x^3 + h_4x^4+...=H(x)\\ R= (2h_1x^2+2h_2x^3+...)+(x +x^2 +…)\\ =2xH(x)+\frac{x}{1-x} L=h1x+h2x2+h3x3+h4x4+...=H(x)R=(2h1x2+2h2x3+...)+(x+x2+…)=2xH(x)+1−xx
根据左右相等得到
(
1
−
2
x
)
H
(
X
)
=
x
1
−
x
H
(
x
)
=
x
(
1
−
x
)
(
1
−
2
x
)
(1-2x)H(X)=\frac{x}{1-x}\\H(x)=\frac{x}{(1-x)(1-2x)}
(1−2x)H(X)=1−xxH(x)=(1−x)(1−2x)x
这就是转移次数数列的母函数,但是我们希望得到显示表达式,可以从母函数的幂级数展开式中求出数列
h
1
,
h
2
,
h
3
,
.
.
.
h_1,h_2,h_3,...
h1,h2,h3,...
采用部分分数的算法
[例2] 几个人在一起,使得其中存在相同生日的概率至少为1/2.
设
P
m
P_m
Pm为
m
m
m个人在一起没有相同生日的概率,则
[例3] 从
n
n
n个元素
a
1
,
a
2
,
.
.
.
,
a
n
a_1,a_2,...,a_n
a1,a2,...,an中取
r
r
r个进行允许重复的组合. 假定允许重复的组合数用
C
∗
(
n
,
r
)
C^*(n,r)
C∗(n,r)表示.
- C ∗ ( n , r ) = C ( n + r − 1 , r ) C^*(n,r)=C(n+r-1,r) C∗(n,r)=C(n+r−1,r) . 用母函数方法重新得到这个结果.
- 先寻找递归公式.
- 这种r元组合, 有以下两重情况.
- 不出现某特定元素设为 a 1 a_1 a1, 这样的组合数为 C ∗ ( n − 1 , r ) C^*(n-1, r) C∗(n−1,r)`. 相当于排除 a 1 a_1 a1后从 a 2 , a 3 , . . . , a n a_2, a_3,..., a_n a2,a3,...,an中取 r r r个作允许重复的组合.
- 至少出现一个 a 1 a_1 a1, 其组合数为 C ∗ ( n , r − 1 ) C^*(n,r-1) C∗(n,r−1), 相当于从 a 1 , a 2 , a 3 , . . . , a n a_1, a_2, a_3,..., a_n a1,a2,a3,...,an中取 r − 1 r-1 r−1个作允许重复的组合, 然后再加上一个 a 1 a_1 a1得从 n n n个元素中取 r r r个作允许重复的组合.
- 根据加法原则
C ∗ ( n , r ) = C ∗ ( n , r − 1 ) + C ∗ ( n − 1 , r ) , 因 C ∗ ( n , 1 ) = n , C ∗ ( n − 1 , 1 ) = n − 1 , 约定 C ∗ ( n , 0 ) = 1. C^*(n,r)=C^*(n,r-1)+C^*(n-1,r), \\ 因C^*(n,1)=n, C^*(n-1, 1)=n-1, \\ 约定C^*(n,0)=1. C∗(n,r)=C∗(n,r−1)+C∗(n−1,r),因C∗(n,1)=n,C∗(n−1,1)=n−1,约定C∗(n,0)=1. - 由于递推公式具有两个参数
n
n
n和
r
r
r,定义数列
{
C
∗
(
n
,
r
)
(
r
=
0
,
1
,
.
.
.
,
2
)
}
\{C^*(n,r)(r=0,1,...,2)\}
{C∗(n,r)(r=0,1,...,2)}的母函数表达式
G n ( x ) = C ∗ ( n , 0 ) + C ∗ ( n , 1 ) x + C ∗ ( n , 2 ) x 2 + … G_n(x)=C^*(n,0)+C^*(n,1)x+C^*(n,2) x^2+… Gn(x)=C∗(n,0)+C∗(n,1)x+C∗(n,2)x2+…
把递推公式带入母函数表达式
[例4] 求n位十进制正数中出现偶数(奇数)个5的数的个数.
- 先从分析
n
n
n位十进制数中出现偶数个5的数的结构
入手。设 D = d 1 d 2 … d n − 1 D=d_1d_2…d_{n-1} D=d1d2…dn−1是n-1
位十进制数,- 若D含有偶数个5,则
d
n
d_n
dn取5以外的0,1,2,3,4,6,
7,8,9中的一个数,使 d 1 d 2 … d n − 1 d n d_1d_2…d_{n-1}d_n d1d2…dn−1dn构成偶数
个5的n位十进制数; - 若D含有奇数个5,则取
d
n
=
5
d_n=5
dn=5,使
d
1
d
2
…
d
n
−
1
d
n
d_1d_2…d_{n-1}d_n
d1d2…dn−1dn构成
偶数个5的十进制数
- 若D含有偶数个5,则
d
n
d_n
dn取5以外的0,1,2,3,4,6,
[例5] Fibonacci
问题提出
假定初生的一对雌雄兔子, 从出生的第2个月之后每个月都可以生出另外一对雌雄兔. 如果第1个月只有一对初生的雌雄兔子, 问n个月之后共有多少对兔子?
递推关系
设满
n
n
n个月时兔子对数为
F
n
F_n
Fn, 其中当月新生兔数目设为
N
n
N_n
Nn对. 第
n
−
1
n-1
n−1个月留下的兔子数目设为
Q
n
Q_n
Qn对.
F
n
=
N
n
+
Q
n
但
Q
n
=
F
n
−
1
,
N
n
=
Q
n
−
1
=
F
n
−
2
,
即第
n
−
2
个的所有兔子到第
n
个月都有繁殖能力了
∴
F
n
=
F
n
−
1
+
F
n
−
2
,
F
1
=
F
2
=
1
由递推关系可依次得到
F
3
=
F
1
+
F
2
=
2
,
F
4
=
F
2
+
F
3
=
3
,
F
5
=
F
3
+
F
4
=
3
+
2
=
5
,
.
.
.
F_n= N_n+ Q_n\\ 但Q_n= F_{n-1}, N_n= Q_{n-1}= F_{n-2}, 即第n-2个 的所有兔子到第n个月都有繁殖能力了 \therefore F_n= F_{n-1}+ F_{n-2}, F_1 =F_2=1 \\ 由递推关系可依次得到\\ F_3= F_1+F_2=2, F_4= F_2+F_3=3, F_5= F_3+ F_4=3+2=5,...
Fn=Nn+Qn但Qn=Fn−1,Nn=Qn−1=Fn−2,即第n−2个的所有兔子到第n个月都有繁殖能力了∴Fn=Fn−1+Fn−2,F1=F2=1由递推关系可依次得到F3=F1+F2=2,F4=F2+F3=3,F5=F3+F4=3+2=5,...
解递推关系
设母函数表达式
G
(
x
)
=
F
1
x
+
F
2
x
2
+
.
.
.
G(x)=F_1x+F_2x^2+...
G(x)=F1x+F2x2+...,将上述递推公式带入母函数表达式
第 3 章 容斥原理
3.1 定理
德.摩根定理:
设
A
,
B
为全集
U
的任意两个子集,则
设A,B为全集U的任意两个子集,则
设A,B为全集U的任意两个子集,则
(
a
)
A
∪
B
‾
=
A
‾
∩
B
‾
(
b
)
A
∩
B
‾
=
A
‾
∪
B
‾
(a) \overline{A∪B}=\overline{A}∩\overline{B}\quad(b) \overline{A∩B}=\overline{A}∪\overline{B}
(a)A∪B=A∩B(b)A∩B=A∪B
定理推广:
设
A
1
,
A
2
,
.
.
.
,
A
n
为
U
的子集,则
设A_1,A_2,...,A_n为U的子集,则
设A1,A2,...,An为U的子集,则
(
a
)
A
1
∪
A
2
∪
.
.
.
A
n
‾
=
A
1
‾
∩
A
2
‾
.
.
.
∩
A
n
‾
(
b
)
A
1
∩
A
2
∩
.
.
.
A
n
‾
=
A
1
‾
∪
A
2
‾
.
.
.
∪
A
n
‾
(a) \overline{A_1∪A_2∪...A_n}=\overline{A_1}∩\overline{A_2}...∩\overline{A_n}\\ (b)\overline{A_1∩A_2∩...A_n}=\overline{A_1}∪\overline{A_2}...∪\overline{A_n}
(a)A1∪A2∪...An=A1∩A2...∩An(b)A1∩A2∩...An=A1∪A2...∪An
两个集合的容斥原理
设
A
和
B
分别具有性质
P
1
和性质
P
2
的元素的集合,则
设A和B分别具有性质P_1和性质P_2的元素的集合,则
设A和B分别具有性质P1和性质P2的元素的集合,则
∣
A
∪
B
∣
=
∣
A
∣
+
∣
B
∣
−
∣
A
∩
B
∣
|A∪B|=|A|+|B|-|A∩B|
∣A∪B∣=∣A∣+∣B∣−∣A∩B∣
[例] 求1到500之间能被5或7整除的正整数个数.
设A为被5整除的整数集合, B为被7整除的整数集合, 用
[
x
]
[x]
[x]表示
x
x
x的整数部分, 则有
三个集合的容斥原理
设
A
,
B
,
C
为任意三个集合,则有
设A,B,C为任意三个集合,则有
设A,B,C为任意三个集合,则有
∣
A
∪
B
∪
C
∣
=
∣
A
∣
+
∣
B
∣
+
∣
C
∣
−
∣
A
∩
B
∣
−
∣
A
∩
C
∣
−
∣
B
∩
C
∣
+
∣
A
∩
B
∩
C
∣
|A∪B∪C|=|A|+|B|+|C|-|A∩B|-|A∩C|-|B∩C|+|A∩B∩C|
∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣
n个集合的容斥原理
设
A
1
,
A
2
,
.
.
.
,
A
n
是有限集合,则有
设A_1,A_2,...,A_n是有限集合,则有
设A1,A2,...,An是有限集合,则有
∣
A
1
∪
A
2
∪
.
.
.
A
n
∣
=
∑
i
=
1
n
∣
A
i
∣
−
∑
i
=
1
n
∑
j
>
i
∣
A
i
∩
A
j
∣
+
∑
i
=
1
n
∑
j
>
i
∑
k
>
j
∣
A
i
∩
A
j
∩
A
k
∣
−
.
.
.
+
(
−
1
)
n
−
1
∣
A
1
∩
.
.
.
∩
A
n
∣
|A_1∪A_2∪...A_n|=\sum_{i=1}^{n}|A_i|-\sum_{i=1}^{n}\sum_{j>i}{|A_i∩A_j|}\\+\sum_{i=1}^{n}\sum_{j>i}\sum_{k>j}{|A_i∩A_j∩A_k|}-...+(-1)^{n-1}|A_1∩...∩A_n|
∣A1∪A2∪...An∣=i=1∑n∣Ai∣−i=1∑nj>i∑∣Ai∩Aj∣+i=1∑nj>i∑k>j∑∣Ai∩Aj∩Ak∣−...+(−1)n−1∣A1∩...∩An∣
容斥原理的余集形式
[例1] 求在1
到10000
的整数中不能被4,5,6中任何一个整除的整数的个数.
[例2]
n
n
n个不同的球分放
m
m
m个不同的盒子里,每盒不空,求分放总数
f
(
n
,
m
)
f(n,m)
f(n,m).
设无约束条件(空)的方法,是因为题目要求不空,采用容斥原理,改写成余集形式
[例3] 夫妻围坐问题
n对夫妻围坐在一圆桌边,圆桌边有2n个座位,则满足男女相间,夫妻不相邻的入座方法数为
(座位不编号:考虑相对位置,一个人坐好位置,大家顺时针挪一个位置,大家相对位置都没变化,认为移动前/移动后一种坐法)
(座位编号:同样的位置大家先坐好,大家顺时针移动一位,大家相对位置没有发生变化,本人的位置发生变化)
[为什么是
(
n
−
1
)
!
(n-1)!
(n−1)!]:因为它是一个圆柱,首先某个人坐在某个位置,剩下的人随便坐,转一圈回来后边的坐法又包括你的坐法
思路:用容斥原理的余集形式来讲,用挨着坐的方式求解不挨着坐的方式,如何让 i i i号女嘉宾挨着 i i i号男嘉宾呢,那就定义 i i i号女嘉宾的左手位为 i i i号
[例4] 从
(
1
,
2
,
…
,
2
n
,
1
)
(1,2,…,2n,1)
(1,2,…,2n,1)中取k个,两两不相邻的取法个数,[不好做]
条件是:1)任意两个数在数列中不相邻 ;2)首尾的1不能同时取
3.2 错排问题
举例:假设站一个队,重新整顿队列,使原来的人一定不在原来位置上。
[例1]
小王要为公司审阅7本书,于是他雇了7个人来审阅它们。他希望每本书有两个审阅者,于是在第一个星期,他给每人一本书来审阅,接着在第二个星期开始重新分配。一共有多少种方式可以完成这两次分配,使得每本书有两个不同的审阅者?
7
!
表示第一周分配有很多种方式,
D
7
根据第一次分配好的有多少种不同的方式
7!表示第一周分配有很多种方式,D_7根据第一次分配好的有多少种不同的方式
7!表示第一周分配有很多种方式,D7根据第一次分配好的有多少种不同的方式
3.3 有限制的排列
[例1]
求字母a,b,c,d,e,f和g具有下列性质的排列个数:在这些排列中, 模式ace和df都不出现
3.4 相对禁位排列
[例1]
有5个学生每天要排成一列去散步. 除第一个学生之外, 每个学生前面都有一个学生. 每天都是同一个人在自己前面走显得单调,第2天他们决定改变排队次序, 使得每个同学前面的人与第1天不同. 问有多少种不同的排队方式?
3.5 欧拉函数
3.6 棋盘多项式