- 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的元素的全排列了 Void Perm(Type list[],int k, int m) {//递归的产生前缀是list[0:k-1]后缀是list[k:m]的全排列的所有排列 if(k==m) {//只剩下一个元素 for(int i=0;i=m;i++) coutlist[i]; coutendl; } else//还有多个元素待排列,递归产生排列 for(int i=k;i=m;i++){ Swap(list[k],list[i]); Perm(list,k+1,m); Swap(list[k],list[i]; } } 为什么需要交换两次 举个例子 比如现在数组的数据是 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,每
您可能关注的文档
最近下载
- 集团公司科技创新管理办法.docx
- 非英语专业本科生口语教学改革方案与设想.doc VIP
- 鲁科版五四制小学五年级英语下册教案Unit 2 Good Behaviour_教案2.pdf VIP
- 四年级上册奥数测试练习思维训练 .pdf VIP
- 在线知道网课《高等工程数学 I(南京理工大学)》课后章节测试答案.docx
- 《幼儿卫生与保健》期末考试复习题库300题(含答案).docx
- 技工院校-通用职业素质课程-就业指导与实训期末考试题库最新.pdf VIP
- 2024年疾控大学习传染病疫情相关事件调查要点答案.docx VIP
- 政治表现鉴定材料.docx VIP
- 老年护理技术培训.pptx VIP
文档评论(0)