组合数学之排列组合生成算法精品文稿.ppt





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

限制150内