Post on 21-Oct-2019
1
排列与组合
潘海为
http://rciip.hrbeu.edu.cn
2
组合恒等式及其意义
n 等式1
n 等式2
rnn
rn
112
221222
nnnn
nnnn
3
组合恒等式及其意义
n 等式3
n 等式4
n 等式5
11
13
12
11
rr
rn
rn
rn
rn
rn
rlrn
rn
rl
ln
nnnnnn 2210
4
组合恒等式及其意义
n 等式6
n 等式7
n 等式8
0110n
rm
rnm
rnm
rnm
kn
knn
kn 1
0110m
mn
mmn
mmn
mnm
5
组合恒等式及其意义
n 等式9
n 等式10
11
kn
kkn
kn
lmnm
kln
kmm
k 0
6
组合恒等式及其意义
n 例23 试用组合学论证法证明恒等式
1-1
1-1
11
2121
2121
tt
tt
nnnn
nnnn
nnnn
nnnn
7
生成算法
n 生成算法也叫构造算法
n 生成算法完成的功能是将所有满足要求的排列或组合无重复、无遗漏地枚举出来
8
生成算法
n 排列的构造算法主要有直接法、字典序法、序数法、逆序数法、邻位对换法等等
n 组合的构造算法主要有字典序法、二进制编码法等等
9
字典序法
n n元自然数集合的全排列,按从左至右、从小
到大的顺序规定其排列的先后顺序
n 可以用一棵树来表示。
B
C
1
F2
L3
G3
M2
D
H1
N3
I3
O1
E
J1
P2
K2
Q1
2 3
10
字典序法
n 举例 对集合{1,2,3},按字典序生成的全排列是
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
n 前序排列和后序排列应具有最长的共同前缀
11
字典序法
n 求839647521的后序排列
q 19的最小排列为123456789
q 19的最大排列为987654321
q 从右向左扫描若都是增的,就没有下一个了;否则,
找出第一次出现下降的位置
12
字典序法
n 求839647521的后序排列
q 找出比右边数字小的第一个数 839647521
q 在“4”的右边找出比“4”大的第一个数
839647521
q 将“4”和“5”对调,成为 839657421
q 再将“5”后面的序列翻转,成为 839651247
13
n 从自然顺序123…n开始,按照字典顺序依次构造集
合{1, 2, …, n}的所有全排列,由一个排列构造下一个
排列的算法如下:
q 对 p1p2…pn 从右向左扫描,找出比右邻数字小的第1个数pi
q 对 p1p2…pn 从右向左扫描,找出比 pi 大的第一个数 pj
q 将 pi 和 pj 互换得 b1b2…bn
q 将 b1b2…bn 中的 bi+1 到 bn 部分的顺序逆转,得
b1b2…bn…bi+1
字典序法算法
14
字典序法算法
15
序数法
n 整数的表示形式
q 十进制表示形式
当 0≤ x < 10i 时,
1
09010
i
kk
kk aax 其中,
16
1
1
! 1n
kk k
1
1
! 1 !n
kn k k
即
n 另一种表示
n!=((n-1)+1)(n-1)!=(n-1)(n-1)!+(n-1)!,同理,
(n-1)!=(n-2)(n-2)!+(n-2)!, …,
因此,n!= (n-1)(n-1)!+ (n-2)(n-2)!+…+2×2!+2!
序数法
17
不难证明,从0到n!-1的任何数m可唯一的表示为
1 2 1( 1)! ( 2)! ... 1!n nm a n a n a
其中 0 , 1,..., 1.ia i i n
所以从0到n!-1的n!个整数与
(an-1,an-2,…a2,a1)一一对应。
另一方面,不难从m算出an-1,an-2,…a2,a1.
序数法
18
过程如下:
1, 0 ! 1m m m n
1 2 1 12 , 0 1m m a a
2 3 2 23 , 0 2m m a a …………….
2 1 2 2( 1) , 0 2n n n nm n m a a n
1 1 1, 0 1n n nm a a n
1 2 2 1( , ,..., , )n na a a a m
序数法
19
序数法
n 算法
q 序号m依次由0变到n!-1
n 由序号m算出中介数an-1an-2an-3…a1
n 由中介数an-1an-2an-3…a1 求出排列 pn pn-1 pn-2 pn-3… p1
q ai 指示排列 P 中数 i+1 所在位置右侧比 i+1 小的数的
个数
n 例24 已知a3a2a1=301,求出排列 p4p3p2p1
20
由中介数求排列
_ _ _ _4 32 1
l a2=0,说明 3 的右边没有比它更小的,故3放在最右端,
l a1=1, 容易得出,2右边还有一个空格放1,于是得到了排列4213。
l a3=3, 知 4 放在空格的最左端,
过程如下
n 例24 已知a3a2a1=301,求出排列 p4p3p2p1
21
换位法
n 给定[n-1]的一个排列п,将n 由最右端依次插入排列п ,即得到n个[n]的排列:
p1 p2…npn-1
np1 p2…pn-1
…
p1 p2…pn-1n
n 基于直接生成法: [n]的全排列可由[n-1]的全排列生成:
22
换位法
n 例如 n=3 (1) 1 (2) 1 1(3) 1 2
1 2
2 12 1
1 2
2 1
33
3
33
3
22
23
n 考虑{1,2…n}的一个排列,其上每一个整数都给
了一个方向,我们称整数 k 是可移的,如果它
的箭头所指的方向的邻点小于它本身。例如
2 6 3 1 5 4
n 其中6、3、5都是可移的。
n 显然1永远不可移。
n n除了以下两种情形外,它都是可移的: (1) n是第一个数,且其方向指向左侧;
(2) n是最后一个数,且其方向指向右侧;
换位法
24
2、当存在可移的数时
(a) 找最大的可移数m
(b) 将m与其箭头所指的邻数互换位置
(c) 将所得排列中比m大的数p的方向调整,即改为
相反方向。
12......n
n 于是,我们可由 按如下算法产生所有排列
12......n
1、开始时:
换位法
25
1 2 3 1 2 3 1 2 3 1 2 3 1 3 2 1 3 2 1 3 2 1 3 2 3 1 2 3 1 2 3 1 2 3 1 2
44
444
44
44
44
4
换位法
2、当存在可移的数时
(a) 找最大的可移数m
(b) 将m与其箭头所指的
邻数互换位置
(c) 将所得排列中比m大
的数p的方向调整,即
改为相反方向。
26
3 2 1 3 2 1 3 2 1 3 2 1 2 3 1 2 3 1 2 3 1 2 3 1 2 1 3 2 1 3 2 1 3 2 1 3
44
444
44
44
44
4
换位法
2、当存在可移的数时
(a) 找最大的可移数m
(b) 将m与其箭头所指的
邻数互换位置
(c) 将所得排列中比m大
的数p的方向调整,即
改为相反方向。
27
组合生成算法n 从{ 1, 2, 3, 4, 5, 6, 7 }中取3个元素的所有组合如下
q 123,124,125,126,127q 134,135,136,137q 145,146,147q 156,157q 167q 234,235,236,237q 245,246,247q 256,257q ……q 567
28
n 从{1,2,…,n}中取r-组合表示为C1C2…Cr,令C1<C2
<…<Cr,其中有Ci≤(n-r+i), i=1,2,…,r
n 生成后序组合的规则
q 对C1C2…Cr从右到左扫描,找出第一个满足Ci<(n-r+i)的i
q CiCi+1
q CjCj-1+1 , j=i+1,i+2,…r
组合生成算法
• 29
总结
n 加法法则、乘法法则、减法法则、一一对应法则
n 排列,组合,可重排列,可重组合
n 二项式定理,多项式定理
n 若干组合等式
n 排列与组合的生成算法