- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)