组合数学之排列组合生成算法幻灯片.ppt





《组合数学之排列组合生成算法幻灯片.ppt》由会员分享,可在线阅读,更多相关《组合数学之排列组合生成算法幻灯片.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、组合数学之排列组合生成算法第1页,共58页,编辑于2022年,星期一2第二讲第二讲:排列组合的生成算法排列组合的生成算法(1)存在存在:满足一定条件配置的存在性满足一定条件配置的存在性.(2)计数:计数:计算出满足条件配置的数目计算出满足条件配置的数目.(3)算法:算法:构造所有配置的算法构造所有配置的算法.(4)优化:优化:优化算法优化算法.组合数学的主要问题组合数学的主要问题:第2页,共58页,编辑于2022年,星期一3一一.排列生成算法排列生成算法l排列生成有几种典型算法排列生成有几种典型算法,这些算法这些算法 都很有成效都很有成效.它们在实际中具有广泛它们在实际中具有广泛 应用价值应用
2、价值.1.序数法序数法2.字典序法字典序法3.邻位互换法邻位互换法(Johnson-Trotter)4.轮转法轮转法 第3页,共58页,编辑于2022年,星期一41.序数法序数法 l序数法基于一一对应概念序数法基于一一对应概念.l先先在在排排列列和和一一种种特特殊殊的的序序列列之之间间建建立立 一一种种一一一一对对应应关关系系,然然后后再再给给出出由由序序列列产产生生排列的方法排列的方法l l因因为为序序列列的的产产生生非非常常方方便便,这这样样我我们们就就可可以以得到一种得到一种利用序列来生成排列的方法利用序列来生成排列的方法.l l如何建立这种一一对应如何建立这种一一对应?第4页,共58页
3、,编辑于2022年,星期一5l思路类似数的思路类似数的10进制、进制、2进制和进制和p进制表进制表示示.第5页,共58页,编辑于2022年,星期一6l这相当于自然数与某种序列之间建立了这相当于自然数与某种序列之间建立了一一对应关系一一对应关系.l l可以利用置换来表示整数可以利用置换来表示整数:n!=n(n-1)!=(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)!+(n-3)(n-3)!+22!+11!+1第6页,共58页,编辑于2022年,星期一7ln!-1=(n-1)(n-
4、1)!+(n-2)(n-2)!+(n-3)(n-3)!+2 2!+11!l l可以证明可以证明,从从0到到n!-1之间的任何整数之间的任何整数m 都可唯一地表示为都可唯一地表示为:m=an-1(n-1)!+an-2(n-2)!+a2 2!+a1 1!其中其中0 ai i,i=1,2,n-1.l lm与序列与序列(an-1,an-2,a2,a1)一一对应一一对应l l书中有确定这些系数的方法书中有确定这些系数的方法.l l 例如:例如:101 3!2 2!0 1!第7页,共58页,编辑于2022年,星期一8l因为满足条件因为满足条件 0 ai i,1 i n-1 (2.1)的序列的序列 (an-
5、1,an-2,a2,a1)共有共有n!个个,这恰好与这恰好与0到到n!-1的的n!个整数一个整数一一对应一对应.l需要建立满足条件需要建立满足条件(2.1)的的n!个序列个序列 (an-1,an-2,a2,a1)和和n元集合元集合S的的 全部排列之间的一一对应关系全部排列之间的一一对应关系.第8页,共58页,编辑于2022年,星期一9l还需要给出一种办法还需要给出一种办法,由每个满足条件由每个满足条件(2.1)的序列的序列(an-1,an-2,a2,a1)可生成唯一可生成唯一的一个排列的一个排列.l这样我们就可以产生出所有的排列这样我们就可以产生出所有的排列.l怎么样由一个满足条件怎么样由一个
6、满足条件(2.1)的序列产生的序列产生一个一个n阶排列阶排列?l l如何把如何把1,2,n的一个排列与一个满足条件的一个排列与一个满足条件(2.1)的序列建立起直接的关系的序列建立起直接的关系?第9页,共58页,编辑于2022年,星期一10l l行列式定义中有行列式定义中有逆序数逆序数的概念的概念,就是一个就是一个排列中违反自然顺序的数对排列中违反自然顺序的数对:比如比如12354的逆序数为的逆序数为1,而而43215的逆序数为的逆序数为6.l l设设p1p2pn是任意一个是任意一个n元排列元排列,则则i+1后后面比面比i+1小的数字的个数小的数字的个数ai总不超过总不超过i,即即ai i,i
7、=1,2,n-1.l这样自然由一个排列得到一个序列这样自然由一个排列得到一个序列 (an-1,an-2,a2,a1),而且满足条件而且满足条件(2.1).第10页,共58页,编辑于2022年,星期一11l l我们可以如下建立序列与排列的对应我们可以如下建立序列与排列的对应:l设设序序列列(an-1,an-2,a2,a1)满满足足条条件件(2.1).则则它它所所对对应应的的排排列列为为(p)=p1p2pn,其其中中ai可可以以看看作作是是排排列列(p)中中数数i+1所所在在位位置置后后面面比比i+1小的数的个数小的数的个数.l要要说说明明这这种种对对应应的的合合理理性性,必必须须清清楚楚.如如何
8、由序列产生出它所对应的排列何由序列产生出它所对应的排列.l我们通过一个具体的例题说明思想方法我们通过一个具体的例题说明思想方法.第11页,共58页,编辑于2022年,星期一12例例2.1(1)4213(301)4后面比后面比4小的数的个数小的数的个数a3=3;3后面比后面比3小小的数的个数的数的个数a2=0;2后面比后面比2小的数的个数小的数的个数a1=1.(2)(301)4213 由由a3=3知知1,2,3都在都在4的后面的后面;由由a2=0知知1,2都在都在3前面前面;由由a1=1知知1在在2后面后面.(3)(4213)(a3a2a1)=(301).第12页,共58页,编辑于2022年,星
9、期一13l l利用序列得到相应排列是关键利用序列得到相应排列是关键,可以设想为可以设想为给给n个格子中填写个格子中填写1,2,n.如上面的例题如上面的例题:例例2.2 设集合设集合S=1,2,3,4,用序数法生成用序数法生成S的全部排列的全部排列.解解 用序数法用序数法,由各个序列对应生成的排列由各个序列对应生成的排列,如表如表2.1所示所示.4213第13页,共58页,编辑于2022年,星期一14N Na a3 3a a2 2a a1 1p p1 1p p2 2p p3 3p p4 4N Na a3 3a a2 2a a1 1p p1 1p p2 2p p3 3p p4 40 01 12 2
10、3 34 45 56 67 78 89 9101011110000000010010100100110110200200210211001001011011101101111111201201211211234123421342134132413242314231431243124321432141243124321432143134213422341234131423142324132411212131314141515161617171818191920202121222223232002002012012102102112112202202212213003003013013103103
11、11311320320321321142314232413241314321432243124313412341234213421412341234213421341324132423142314312431243214321第14页,共58页,编辑于2022年,星期一15l比如其中的序列比如其中的序列(221)所对应的排列所对应的排列:先由先由a3=2决定决定4的位置的位置l l满足条件满足条件(2.1)的的n!个序列很容易产生的个序列很容易产生的,利用这些序列就可以得到全体利用这些序列就可以得到全体n阶排列阶排列.l l这种利用序列产生排列的方法就是所谓这种利用序列产生排列的方法就是所谓的
12、的序数法序数法.4再由再由a2=2决定决定3的位置的位置321再由再由a1=1决定决定2的位置的位置第15页,共58页,编辑于2022年,星期一16 例例 字符集字符集1,2,3,1,2,3,较小的数字较先较小的数字较先,这样按字典序生成的全排列是这样按字典序生成的全排列是:123,132,213,231,312,321123,132,213,231,312,321。2.字典序法字典序法 对给定的字符集中的字符规定了对给定的字符集中的字符规定了一个先后关系,在此基础上规定两一个先后关系,在此基础上规定两个全排列的先后是从左到右逐个比个全排列的先后是从左到右逐个比较对应的字符的先后。较对应的字符
13、的先后。第16页,共58页,编辑于2022年,星期一172.字典序法字典序法l l字典序法就是按照字典排序的思想逐一产字典序法就是按照字典排序的思想逐一产生所有排列生所有排列.l l设想要得到由设想要得到由1,2,3,4以各种可能次序产生出以各种可能次序产生出4!个个“单词单词”.肯定先排肯定先排1234,再排再排1243,下下来是来是1324,1342,.,4321.l分析这种过程分析这种过程,看如何由一个排列得到看如何由一个排列得到下一个排列下一个排列,并给出严格的数学描述并给出严格的数学描述.第17页,共58页,编辑于2022年,星期一18例例2.3 设有排列设有排列(p)=276354
14、1,按照字典式排按照字典式排序序,它的下一个排列是谁它的下一个排列是谁?(q)=2764135.(1)2763541 找最后一个找最后一个正序正序35(2)2763541 找找3后面比后面比3大的最后一个数大的最后一个数(3)2764531 交换交换3,4的位置的位置(4)2764135 把把4后面的后面的531反序排列为反序排列为 135即得到最后的排列即得到最后的排列(q)第18页,共58页,编辑于2022年,星期一19l求求(p)=p1pi-1pipn的下一个排列的下一个排列(q):(1)求求 i=max j pj-1 pj (找找最后一个正序最后一个正序)(2)求求 j=max k p
15、i-1 pk(找找最后大于最后大于pi-1者者)(3)互换互换pi-1与与pj得得 p1pi-2 pj pipi+1pj-1 pi-1 pj+1pn(4)反排反排pj后面的数得到后面的数得到(q):p1pi-2 pj pnpj+1pi-1pj-1.pi+1 pi第19页,共58页,编辑于2022年,星期一20例例2.4 设设S=1,2,3,4,用字典序法求出用字典序法求出S的全的全部排列部排列.解解 1234,1243,1324,1342,1423,1432,2134,2143,2314,2341,2413,2431,3124,3142,3214,3241,3412,3421,4123,413
16、2,4213,4231,4312,4321.思考题思考题:是否可定义一种序列是否可定义一种序列,并定义序列之间的并定义序列之间的一种序关系一种序关系,使得可按照序列产生出字典式序排使得可按照序列产生出字典式序排列所有列所有n阶排列阶排列.第20页,共58页,编辑于2022年,星期一213.邻位互换法邻位互换法l l邻位互换生成算法的思想是很自然的一种邻位互换生成算法的思想是很自然的一种想法想法,其中蕴涵递归的思想其中蕴涵递归的思想.l l是由是由Johnson-Trotter首先提出的首先提出的.l通过把通过把n插入到插入到n-1阶排列的不同位置得到阶排列的不同位置得到n阶排列阶排列:n=1:
17、1 n=2:12,21.n=3:123,132,312;321,231,213.第21页,共58页,编辑于2022年,星期一22n=4:1234,1243,1423,4123 4132,1432,1342,1324 3124,3142,3412,4312 4321,3421,3241,3214 2314,2341,2431,4231 4213,2413,2143,2134第22页,共58页,编辑于2022年,星期一23l l用这种方法可以产生出任意用这种方法可以产生出任意n阶排列阶排列.l为了产生为了产生n阶排列阶排列,我们必须知道所有我们必须知道所有n-1阶排列阶排列.l如果考虑算法如果考虑
18、算法,必须存储所有必须存储所有n-1阶排列阶排列,然后才能产生出所有然后才能产生出所有n阶排列阶排列.这是一个很这是一个很大的缺点大的缺点.l分析过程分析过程,找到规律找到规律,直接找到通过邻位直接找到通过邻位交换来产生的下一个排列方式交换来产生的下一个排列方式.第23页,共58页,编辑于2022年,星期一24l从初始排列从初始排列1234开始开始,在每个数上方加在每个数上方加一个箭头一个箭头“”,如如 l当一个数上方箭头所指的一侧当一个数上方箭头所指的一侧,相邻的数相邻的数比这个数小的时候比这个数小的时候,称这个数处于活动状称这个数处于活动状态态.在在 中数中数2,3,4都处于活动都处于活动
19、状态状态.第24页,共58页,编辑于2022年,星期一25中中6 6、3 3、5 5都是处于活动状态都是处于活动状态.显然显然1 1永永远不是活动的,远不是活动的,n除了以下两种情形外,除了以下两种情形外,它都是它都是处于活动状态处于活动状态的的:(1):(1)n是第一个是第一个数,且其方向指向左侧;数,且其方向指向左侧;(2)(2)n是最后一个数,且其方向指向右是最后一个数,且其方向指向右侧。侧。l l利用这个概念可以把上面的生成利用这个概念可以把上面的生成排列的方法叙述的比较清楚排列的方法叙述的比较清楚.第25页,共58页,编辑于2022年,星期一26l l 设有排列设有排列(p)=p1p
20、2pn.Step 1.若排列若排列(p)=p1p2pn中没有处于活中没有处于活动状态的数动状态的数,则停止则停止.Step2.若排列若排列(p)=p1p2pn中有处于活动状中有处于活动状态的数态的数,则设则设m是处于活动状态数中的最大是处于活动状态数中的最大者者.把把m与它箭头方向所指的相邻数互换与它箭头方向所指的相邻数互换位置位置.Step 3.改变所有比改变所有比m大的数上方的箭头大的数上方的箭头;然然后转向后转向Step 1.第26页,共58页,编辑于2022年,星期一27 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
21、 2 3 1 2 3 1 2 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 3444444444444444444444444第27页,共58页,编辑于2022年,星期一284.轮转法轮转法l l轮转法是我国数学家于轮转法是我国数学家于1996年提出的年提出的.该该算法的求解过程如下:算法的求解过程如下:l给定给定n个不同元素个不同元素N1,N2,Nn-1,Nn,将将N1N2Nn-1Nn叫做叫做基准排列基准排列.(1)(1)先逐步生成以先逐步生成以N1打头的所有排列打头的所有排列(a)先生成以先生成以
22、N1N2Nn-2 打头的所有排列打头的所有排列 N1N2Nn-2 Nn-1Nn,N1N2Nn-2Nn Nn-1第28页,共58页,编辑于2022年,星期一29(b)再生成以再生成以N1N2Nn-3打头的排列打头的排列.在在(a)中生成的两个排列均在其内中生成的两个排列均在其内,并对并对它们中的每一排列它们中的每一排列,使使N1N2Nn-3不动不动,对其后继元素从左向右按顺时针方向对其后继元素从左向右按顺时针方向轮转两次轮转两次,每轮转一次便生成一个新排每轮转一次便生成一个新排列列,由此共生成四个新排列由此共生成四个新排列,连同连同(a)中中的两个排列共六个排列的两个排列共六个排列:第29页,共
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 组合 数学 排列组合 生成 算法 幻灯片

限制150内