正文

集合的全排列2006-07-19 16:37:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/argol/16688.html

分享到:

 设R={r1,r2,r3,....,rn}是要进行排列的n个元素,Ri=R - {ri}.集合X中元素的全排列   记为perm(X).(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀ri,得到的排列。   R的全排列可归纳如下定义如下:     当n=1时,perm(R)=perm(r),其中r是集合R中的唯一元素。     当n>1时,perm(R)的全排列可由(r1)perm(R1),(r2)perm(R2),....,(rn)perm(Rn)构成。   依此定义,可产生计算集合R的全排列的算法如下:      public static void perm(Object []list,int k,int m)   {      //产生list[k,m]的所有排列      if (k == m)      {            //单元素序列            for (int i = 0; i <= m; i++)               System.out.print(list[i]);            System.out.println();       }      else      {          //多元素序列,递归产生排列          for (int i = k; i <= m; i++)          {              MyMath.swap(lisk,k,i);              perm(list,k+1,m);              MyMath.swap(list,k,i);          }       }   }   PS:集合的全排列运用的是分治思想。即把一个问题分成若干个子问题。在子问题解决的基础上,原问题也就   可以解决了。在这个例子中,集合的数学定义对算法的产生起到了关键性的作用。

阅读(4378) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册