6
˜pff(2)˜ ssdf93 May 28, 2011 U 1 ˘~ 1 2 1 3 2 4 ˜ 3 5 Gray 4 6 r-˜ 5 7 6 1 ˘~ !¤”˜œ,61˝˘˜L ¤”RP8˝¯sß!'e¤”U ˜ (˜88˚0WxWx1/ (WxœHzW˝aœ(W˝bM4talkœ(tallM b 2 ;$˝ {1, 2, 3}3-\: ,˝^Wx - 1 - 2 - 3 z!v'v4h:¸v˜ tpk4*l4p/;¤23/;¤ 1,HBœ;¤tpm 2,/bm4l»p 3,9@mp 1

组合数学学习笔记(2):生成排列与组合

Embed Size (px)

DESCRIPTION

组合数学学习笔记(2):生成排列与组合

Citation preview

Page 1: 组合数学学习笔记(2):生成排列与组合

组合数学学习笔记(2):生成排列与组合

ssdf93

May 28, 2011

目目目 录录录

1 知知知识识识回回回顾顾顾 1

2 生生生成成成排排排列列列 1

3 逆逆逆序序序列列列 2

4 生生生成成成组组组合合合 3

5 Gray码码码 4

6 生生生成成成r-组组组合合合 5

7 后后后记记记 6

1 知知知识识识回回回顾顾顾

上次我们讨论了排列和组合的基本内容,然后就多重集的排列和组合进行了讨论。最后归纳了盒子与球的8种情况关系,这次,让我们来讨论如何生成排列和组合。在生成排列和组合的时候,常常涉及到字典序的问题,字典序通俗的说就是

按在字典里出现的先后顺序,如字母a出现在字母b的前头,talk出现在tall的前面。

2 生生生成成成排排排列列列

生成排列的方法主要有两种。我们以生成{1, 2, 3}的3−排列作为说明

第一种,非字典序,方法如下将←−1←−2←−3顺次排列,并让其上方箭头表示方向,开始,方向都朝左。并规定,

如果整数k比它箭头指向的一个相临数要大,则它是活动的,如2,3都是活动的1,首先求出最大的活动整数m2,交换m和箭头指向的相邻数3,改变所有比m大的数的方向。

1

Page 2: 组合数学学习笔记(2):生成排列与组合

我们演示一遍:

←−1←−2←−3

←−1←−3←−2

←−3←−1←−2

−→3←−2←−1

←−2−→3←−1

←−2←−1−→3

第二种,字典序,方法如下顺次排列1231,从最右边开始,找到第一个比自己右边数小的数m,2,在m的右侧找到比m大的最小整数n,交换m,n3,将此时n(原来m所在位置)右侧的数的顺序反转过来我们演示一遍:123 m=2 n=3 交换132,反转3为3,得132132 m=1 n=2 交换231,反转31为13,得213213 m=1 n=3 交换231,反转1为1,得231231 m=2 n=3 交换321,反转21为12,得312312 m=1 n=2 交换321,反转1为1得,321

3 逆逆逆序序序列列列

我们对逆序列做一个介绍。

对于一个排列a1a2a3 · · · an,如果i < j,并且ai > aj那么(ai, aj)叫做一个逆序对。

我们让bi为满足j < i但aj > ai的个数,那么b1, b2, · · · , bn叫做排列a1a2a3 · · · an的逆序列。如4,2,1,3的逆序列为2,1,1,0.

逆序列有几个性质:1,令b = b1 + b2 + · · ·+ bn,则b量度排列的无序程度。2,对于bi满足,0 ≤ bi ≤ n− i。3,每一个逆序对对应唯一一个排列。4,至少通过b次交换相邻的数,使得排列a1a2a3 · · · an变成1, 2, 3, · · · , n。

根据第三点特性,我们可以根据任意给定的逆序对,求出其对应的排列方案第一种方法:写出n,然后从n到1顺次写在已写出的第bi个数字后。

第二种方法:留出n个空格,依次从1到n,将数填到第bi + 1个没有被占用的空格后。

下面给出一个例子。

2

Page 3: 组合数学学习笔记(2):生成排列与组合

确定{1, 2, 3, 4, 5, 6, 7, 8}的排列,它的逆序列是5, 3, 4, 0, 2, 1, 1, 0.我们使用第一种方法:

8 : 8

7 : 87

6 : 867

5 : 8657

4 : 48657

3 : 486537

2 : 4862537

1 : 48625137

第二种方法:

1 : 1

2 : 2 1

3 : 2 1 3

4 : 4 2 1 3

5 : 4 2 5 1 3

6 : 4 6 2 5 1 3

7 : 4 6 2 5 1 3 7

8 : 4 8 6 2 5 1 3 7

不过,逆序列和原序列还是有一定的区别的,对于任何一个排列,其ai一旦决定,ai+1就不能再选择ai的那个数了。而逆序列不一样,每一个bi都是独立的,不受其它的影响。

4 生生生成成成组组组合合合

对于S = {xn−1, xn−2 · · · , x1},它的子集有2n个;对于每一个子集来说,xi要么属于其中,要么不属于其中,我们用1来表示属于,用0表示不属于,然后可以用一个n元组(也就是二进制数)来表示,即

(an−1, · · · , a1, ao) = an−1 · · · , a1, a0

则当n=3时,用如下方法生成组合

3

Page 4: 组合数学学习笔记(2):生成排列与组合

子集 二进制数 数字φ 0 0 0 0{x0} 0 0 1 1{x1} 0 1 0 2{x1, x0} 0 1 1 3{x2} 1 0 0 4{x2, x0} 1 0 1 5{x2, x1} 1 1 0 6{x2, x1, x0} 1 1 1 7

用这种方法,既可生成字典序,又可直接求出上一个或者下一个组合。如求{x6, x4, x2, x1, x0}的下一个组合。解:集合{x6, x4, x2, x1, x0}对应的二进制数为(1010111)2,下一个二进制数为(1011000)2,对应集合{x6, x4, x3}即为原组合的下一个组合。

字典序也叫压缩序,因为每一个字典序可以分为不含有xn−1的前半部分和含有xn−1的后半部分。

5 Gray码码码

Gray码是这样定义的:规定:1阶Gray码是0

1

设n阶Gray码是由n-1阶Gray码先对称复制一遍,然后在原来部分最前面加0,复制部分最前面加1。如2阶Gray码:

0 00 11 11 0

如3阶Gray码:

0 0 00 0 10 1 10 1 01 1 01 1 11 0 11 0 0

我们知道Gray码的定义是递归的,我们要知道4阶Gray码必须知道3阶,又必须知道2阶,又必须知道1阶,那么如何直接顺序写出任意n阶的Gray码呢?我们有如下算法:从n元组(an−1 · · · a1a0) = 00 · · · 0开始,当n元组(an−1 · · · a1a0) 6= 10 · · · 0时。1,计算σ(an−1 · · · a1a0) = an−1 + · · ·+ a1 + a0.2,如果σ(an−1 · · · a1a0)为偶数,则改变a0的值(0变为1,或1变为0)。3,如果σ(an−1 · · · a1a0)为奇数,则从右边开始找到第一个非0项,如ai项,改

4

Page 5: 组合数学学习笔记(2):生成排列与组合

变ai+1的值(0变为1,或1变为0)。上述算法生成的Gray码称为n阶反射Gray码。

这样一来,我们每个n元组对应一个组合,这样也可以用Gray码的方法生成组合。

那么如何根据字典序中n元来确定对应Gray码序表的位置呢?设:

bi =

{0 ,若an−1 + · · ·+ ai为偶数

1 ,若an−1 + · · ·+ ai为奇数

则,an−1 · · · a1a0在Gray码序表的位置和bn−1 · · · b1bn在字典序表的位置相同。换句话说an−1 · · · a1a0在Gray码表的位置在

k = bn−1 × 2n−1 + · · ·+ b1 × 2 + b0 × 20

上。

6 生生生成成成r-组组组合合合

在一个组合{1, 2, 3, 4, 5, 6, 7, 8, 9}的5-组合字典序,第一个是12345,最后一个是56789.那么,如何生成r-组合呢?我们有如下算法:从r-组合a1a2 · · · ar = 12 · · · r开始。当a1a2 · · · ar 6= (n− r + 1)(n− r + 2) · · ·n时,做1,确定最大整数k,使ak + 1 ≤ n且ak + 1不是a1, a2, · · · , ar中的一个。2,用r-组合

a1 · · · ak−1(ak + 1)(ak + 2) · · · (ak + r − k + 1)

替换a1a2 · · · ar

那么,依照上面的算法,S = {1, 2, 3, 4}的3-组合为:123,124,134,234.而对于每一个3-组合,我们若将其进行排列,那么最终,我们可以得到S的所有3-排列:

123 124 134 234132 142 143 243312 412 413 423321 421 431 432231 241 341 324312 214 314 324

那么,我们已知一个r-组合,如何确定他在字典序中的位置呢?有如下公式:(

n

r

)−(n− a1r

)−(n− a2r − 1

)− · · · −

(n− ar−1

2

)−(n− ar

1

)例:在{1, 2, 3, 4, 5, 6, 7, 8}的4-组合中,组合1258在字典序中的位置是?

5

Page 6: 组合数学学习笔记(2):生成排列与组合

解:在第 (8

4

)−(7

4

)−(6

3

)−(3

2

)−(0

1

)= 12

个位置上。

7 后后后记记记

第二部分到此就结束了,感谢大家的阅读。以上内容参考自Richarda A. Brualdi的《组合数学》如果你发现什么错误,请批评指正。我的联系方式:邮箱:[email protected]:[email protected][email protected] & facebook:[email protected]网站:cupdish.com最后感谢大家的阅读和支持!

6