全排列的生成算法.doc

全排列的生成算法.doc

ID:57908266

大小:17.50 KB

页数:3页

时间:2020-04-03

全排列的生成算法.doc_第1页
全排列的生成算法.doc_第2页
全排列的生成算法.doc_第3页
资源描述:

《全排列的生成算法.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、3全排列的生成算法全排列的生成算法全排列的生成算法就是对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来。任何n个字符集的排列都可以与1~n的n个数字的排列一一对应,因此在此就以n个数字的排列为例说明排列的生成法。  n个字符的全体排列之间存在一个确定的线性顺序关系。所有的排列中除最后一个排列外,都有一个后继;除第一个排列外,都有一个前驱。每个排列的后继都可以从它的前驱经过最少的变化而得到,全排列的生成算法就是从第一个排列开始逐个生成所有的排列的方法。  全排列的生成法通常有以下几种:  字典序法  递增进位数制法  递减进位数制法  邻

2、位交换法  递归类算法1.字典序法字典序法中,对于数字1、2、3......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于5个数字的排列12354和12345,排列12345在前,排列12354在后。按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是54321。  字典序算法如下:  设P是1~n的一个全排列:p=p1p2......pn=p1p2......pj-1pjpj+1......pk-1pkpk+1......pn  1)从排列的右端开始,找出第一个比右边数字小的数字的序号j(j从左端开始计算

3、),即j=max{i

4、pi

5、pi>pj}(右边的数从右至左是递增的,因此k是所有大于pj的数字中序号最大者)  3)对换pi,pk 4)再将pj+1......pk-1pkpk+1pn倒转得到排列p’’=p1p2.....pj-1pjpn.....pk+1pkpk-1.....pj+1,这就是排列p的下一个下一个排列。  例如是数字1~9的一个排列。从它生成下一个排列的步骤如下:  自右至左找出排列中第一个比右边数字小的数字4  在该数字后的数字中找出比4大的数中

6、最小的一个5  将5与4交换  将7421倒转  所以的下一个排列是。2.递增进位数制法在递增进位制数法中,从一个排列求另一个排列需要用到中介数。如果用ki表示排列p1p2...pi...pn中元素pi的右边比pi小的数的个数,则排列的中介数就是对应的排列k1......ki......kn-1。3全排列的生成算法  例如排列的中介数是,7、2、6、......分别是排列中数字8、3、9、......的右边比它小的数字个数。  中介数是计算排列的中间环节。已知一个排列,要求下一个排列,首先确定其中介数,一个排列的后继,其中介数是原排列中介数加1,需要注意的是

7、,如果中介数的末位kn-1+1=2,则要向前进位,一般情形,如果ki+1=n-i+1,则要进位,这就是所谓的递增进位制。例如排列的中介数是,则下一个排列的中介数是+1=(因为1+1=2,所以向前进位,2+1=3,又发生进位,所以下一个中介数是)。  得到中介数后,可根据它还原对应得排列。  算法如下:  中介数k1、k2、......、kn-1的各位数字顺序表示排列中的数字n、n-1、......、2在排列中距右端的的空位数,因此,要按k1、k2、......、kn-1的值从右向左确定n、n-1、......、2的位置,并逐个放置在排列中:i放在右起的ki+

8、1位,如果某位已放有数字,则该位置不算在内,最后一个空位放1。  因此从可得到排列,它就是的后一个排列。因为9最先放置,k1=6,9放在右起第7位,空出6个空位,然后是放8,k2=7,8放在右起第8位,但9占用一位,故8应放在右起第9位,余类推。  3.递减进位制数法在递增进位制数法中,中介数的最低位是逢2进1,进位频繁,这是一个缺点。把递增进位制数翻转,就得到递减进位制数。  的中介数是(k1k2...kn-1),倒转成为(kn-1...k2k1),这是递减进位制数的中介数:ki(i=n-1,n-2,...,2)位逢i向ki-1位进1。给定排列p,p的下一

9、个排列的中介数定义为p的中介数加1。例如p=,p的中介数为,p的下一个排列的中介数为+1=,由此得到p的下一个排列为。  给定中介数,可用与递增进位制数法类似的方法还原出排列。但在递减进位制数中,可以不先计算中介数就直接从一个排列求出下一个排列。具体算法如下:  1)如果p(i)=n且i<>n,则p(i)与p(i-1)交换  2)如果p(n)=n,则找出一个连续递减序列9、8、......、i,将其从排列左端删除,再以相反顺序加在排列右端,然后将i-1与左边的数字交换  例如p=的下一个排列是。求的下一个排列时,因为9在最左边且第2位为8,第3位不是7,所以

10、将8和9从小到大排于最右端,再将7与其左方数字对调得

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。