全排列算法设计与分析.ppt

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
全排列算法设计与分析

全排列 1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。 由于一个数的全排列就是其本身,从而得到以上结果。 2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六组数。 即以3开头的和4,5的全排列的组合、以4开头的和3,5的全排列的组合和以5开头的和3,4的全排列的组合. 从而可以推断,设一组数p = {r1, r2, r3, ... ,rn}, 全排列为perm(p),pn = p- {rn}。 因此perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), ... , rnperm(pn)。当n = 1时perm(p} = r1。 为了更容易理解,将整组数中的所有的数分别与第一个数交换,这样就总是在处理后n-1个数的全排列 两个例子 123的全排列 --首先遍历元素,然后把遍历到的每一个元素都和第一个元素交换 第一个和第一个交换 就是1和1交换 最后还是123 那么就形成了 123? 213? 321 这样的3组 (交换后 再换回来 还原成123 因为后面的交换都是在123的基础上交换的 所以swap要写2次) -检查每一组除了第一个之外的剩余元素, 如果这些元素个数是2,那么就对这剩下的2个元素全排列 就是123 132 ,? 213 231 , 321 312 2个元素的全排列很简单 就是把这2个元素交换位置就OK) 两个例子 1234的全排列 --首先遍历元素,然后把遍历到的每一个元素都和第一个元素交换 那么就形成了 1234? 2134? 3214 4231 这样的4组 -检查每一组除了第一个之外的剩余元素, 如1234剩余的是234,发现是3个元素 那么问题就转换为求234的全排列了 接下来也是一样 问题转换为求134, 214, 231的全排列像这样 总是对除了第一个之外的元素全排列, 每次元素的个数都在减少一个,求N个元素全排列最终就变成求2的元素的全排列了 为什么需要交换两次 举个例子 比如现在数组的数据是 123 算法是这样的 1和3先交换 变成了321 然后递归 2和1交换 变成了312 然后递归 满足if语句条件输出 然后在逐层反回 还是 123 只不过这次应该是23交换了 这样在递归 才有能把所有的组合找出来 如果你第二次不交换i j 那就是321进入下个循环了 所以会漏掉很多组合 * * * 求n个元素的全排列。 分析:n=1 输出a1; n=2 输出a1 a2; a2 a1; n=3 输出a1 a2 a3; a1 a3 a2; a2 a1 a3; a2 a3 a1; a3 a2 a1; a3 a1 a2; 归纳:n=3时排列的分类 (1)a1类:a1之后跟a2,a3的全排列; (2)a2类:a2之后跟a1,a3的全排列; (3)a3类:a3之后跟a2,a1的全排列。 将(1)中的a1,a2互换位置,得到(2); 将(1)中的a1,a3互换位置,得到(3). 可以用循环重复执行“交换位置,后跟剩余序列的所有排列”;对剩余的序列再使用该方法,直至没有剩余序列——递归调用 由排列组合的知识可知,n个元素的全排列共有n!种。 n!可分解为n*(n-1)!种,而 (n-1)!又分解为(n-1)(n-2)!种, 依次类推。 若用一个数组a[n]来保存1~n之间的n个自然数,对于i =1~n,每次使a[1]同a[i]交换后,对a[2]~a[n]中的n-1个元素进行全排列,然后再交换a[1]与a[i]的值,使它恢复为此次排列前的状态; 同样,对于a[3]~a[n]区间内的n-2个元素进行全排列,然后再把交换的元素交换回来; 依次类推,直到对a[n]进行全排列时,输出整个数组的值,即得到一种排列结果。 n=3 1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 3 1 2 n=4 1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 3 2 1 4 2 3 2 1

文档评论(0)

yaobanwd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档