知识大全 一个实现排列和组合的JavaBean

Posted 排列

篇首语:留得青山在,不怕没柴烧。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 一个实现排列和组合的JavaBean相关的知识,希望对你有一定的参考价值。

一个实现排列和组合的JavaBean  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在我们编程时 经常要涉及到排列和组合的问题 那么在Java中应该如何实现呢?其实这个问题首先是个算法的问题 明确了算法 用什么编程语言倒是显得不那么重要了      一 全排列  所谓全排列 就是对n个对象 列出其所有可能的排列顺序 这个问题相对来说要简单一点 让我们先从最简单的情况着手 如果我们只有一个对象 该如何实现其全排列呢?答案很简单 现在我们只有一种排列 OK 现着我们试着引入第二个对象 首先我们需要知道 现在增加了几种全排列的可能 我们可以这么看 第n个对象的引入 对于n 个对象的全排列的影响就是在原先的每一个全排列中的任一位置插入第n个对象 也就是说 listcount(n)=listcount(n )*n 而按照这个思路 对于任意n个对象的全排列 我们都可以从最简单的一个对象的全排列开始直到生成全部n个对象的全排列      二 组合  所谓组合 就是从n个对象中取出任意m个对象的全部可能 这个问题可能要复杂一点 对于组合来说 对象的顺序是没有意义的 和 是同一种可能 那么我们有必要人为地制定一个规则 我们可以设想给每一个对象编上连续的序号 而在我们的组合中对象必须是按其序号的顺序排列 这样我们就能有效地避免排列顺序对我们的影响 假定我们现在有六个对象 其序号是 那么我们的第一种组合是 而最后一种组合则是 在此之间 我们经历了其它有可能出现的 种情况 对于这种算法我们很自然地会想到使用递归函数 首先我们先在我们的结果集中定义第一种可能是 然后我们把当前位置定为最后一位 只要有可能 对于最后一位来说 它的最大值只能是 在未到 之前 每增加一次就增加一种新的组合 如果最后一位已经是 则我们将当前位置转入前一位 前一位的最大值是 如果前一位还没到 则将前一位加一 然后当前位置再度转入最后一位 现在最后一位的最小值是 从 开始直到 又形成了我们新的组合 这样 直到我们最终出现 这个组合时 函数退出   下面是我们的Java源程序   mytest java:  package customers;  public class mytest  String[] mychar=new String[ ];  int charcount;  int charlist;  public void SetMyTest()  //初始化  charcount= ;  charlist= ;    public void insertChar(String thischar)  //增加新的字符串  charcount++;  mychar[charcount]=thischar;  charlist*=charcount;    public String listAllChar()  //列出全排列  String[][] allchar=new String[charlist+ ][charcount+ ];  int i;  int j;  int z= ;  for (i= ;i<=charcount;i++)  myCopy(addCharList(i allchar z) allchar charlist charcount);  z*=i;    String listallchar=new String(\\ \\ );  for (i= ;i<=charlist;i++)   for (j= ;j<=charcount;j++)  listallchar+=allchar[i][j]+\\ \\ ;  listallchar=listallchar+\\ <BR>\\ ;    return listallchar;    public String[][] addCharList(int i String[][] allchar int z)   //在i 个对象的全排列中引入第i个对象  int j;  int h= ;  int k;  String[][] tempallchar=new String[charlist+ ][charcount+ ];  for (k= ;k<=z;k++)  for (j= ;j<=i;j++)  myCopy(tempchar(j allchar[k] mychar[i]) tempallchar[h] charcount);  h++;      return tempallchar;    public String[] tempchar(int i String[] beginchar String thischar)  //将新对象插入指定位置  int j;  String[] tempbeginchar=new String[charcount+ ];  myCopy(beginchar tempbeginchar charcount);  for (j=charcount;j>i;j ) tempbeginchar[j]=tempbeginchar[j ];  tempbeginchar[i]=thischar;   return tempbeginchar;    public String selectSomeChar(int select)  //列出其中取出select个对象的全部组合  int selectcount= ;  int i;  for (i=select+ ;i<=charcount;i++) selectcount=selectcount*i/(i select);  String[][] selectchar=new String[selectcount+ ][select+ ];  int[][] selectint=new int[selectcount+ ][select+ ];  for (i= ;i<=select;i++)   selectchar[ ][i]=mychar[i];  selectint[ ][i]=i;    int z= ;  addSelect(selectchar selectint select select);  int j;  String selectsomechar=new String(\\ \\ );  for (i= ;i<=selectcount;i++)   for (j= ;j<=select;j++)  selectsomechar+=selectchar[i][j]+\\ \\ ;  selectsomechar=selectsomechar+\\ <BR>\\ ;    return selectsomechar;    public void addSelect(String[][] selectchar int[][] selectint int z int position int select)  //增加新的组合  int i;  if (position==select)  if (selectint[z][position]<charcount)  z++;  myCopy(selectint[z ] selectint[z] select);  selectint[z][select]++;  for (i= ;i<=select;i++) selectchar[z][i]=mychar[selectint[z][i]];  addSelect(selectchar selectint z position select);    else  position ;  addSelect(selectchar selectint z position select);      else  if (selectint[z][position]<charcount select+position)  selectint[z][position]++;  selectint[z][position+ ]=selectint[z][position]+ ;  position++;  addSelect(selectchar selectint z position select);    else  if (position== )  return;    else  position ;  addSelect(selectchar selectint z position select);          public void myCopy(String[][] Str String[][] Str int i int j)  int h;  int k;  for (h= ;h<=i;h++) for (k= ;k<=j;k++) Str [h][k]=Str [h][k];    public void myCopy(String[] Str String[] Str int i)  int h;  for (h= ;h<=i;h++) Str [h]=Str [h];    public void myCopy(int[] Str int[] Str int i)  int h;  for (h= ;h<=i;h++) Str [h]=Str [h];      现在我们可以在一个JSP程序中使用这个JavaBean   <%@ page contentType=\\ text/;charset=gb \\ %>  <HTML>  <HEAD>  <TITLE>  排列和组合  </TITLE>  </HEAD>  <BODY>  <jsp:useBean id=\\ mytest\\ scope=\\ page\\ class=\\ customers mytest\\ />  <%  mytest SetMyTest();  mytest insertChar(\\ YSY\\ );  mytest insertChar(\\ DBF\\ );  mytest insertChar(\\ CYY\\ );  mytest insertChar(\\ YKF\\ );  mytest insertChar(\\ SJJ\\ );  mytest insertChar(\\ YZDS\\ );  out print(mytest listAllChar());  out print(mytest selectSomeChar( ));  %>  </BODY>  </HTML>     三 排列  所谓排列 就是从n个对象中取出m个对象的所有排列的可能 cha138/Article/program/Java/hx/201311/26258

相关参考

知识大全 15446的排列组合有多少种,请写出来,谢谢

15446的排列组合有多少种,请写出来,谢谢!5!/2!=60种因为4之间的排法造成重复,所以除掉重复的,0到9的排列组合有多少种不晓得排列六位数为一组是什么意思,如果是从中抽取6个数字排列为一个六位

知识大全 关于数字排列的一个程序

  输出的所有排列组合不能在第三位和不能相邻   先看代码吧   importjavautilArrayList;  importjavau

组合的排列顺序有哪几种?怎样选用?

  根据组合排列图,组合的排列顺序有两种,一种称为“S”形排列法,另一种称为分段排列法,这两种方法都是自站外向站内自上而下地排列组合。对于咽喉较短的车站选用“S”型排列法,对于咽喉较长的车站迁用分段排

组合的排列顺序有哪几种?怎样选用?

  根据组合排列图,组合的排列顺序有两种,一种称为“S”形排列法,另一种称为分段排列法,这两种方法都是自站外向站内自上而下地排列组合。对于咽喉较短的车站选用“S”型排列法,对于咽喉较长的车站迁用分段排

组合排列的原则是什么?

  组合排列的原则是:安排每个组合在组合架上的位置时,要求方便走线并使走线最短,避免同一架上的10个组合间以及架间的配线迂回跨越。

组合排列的原则是什么?

  组合排列的原则是:安排每个组合在组合架上的位置时,要求方便走线并使走线最短,避免同一架上的10个组合间以及架间的配线迂回跨越。

知识大全 Java键盘获取排列组合数,进行排列显示以及排列计算

Java键盘获取排列组合数,进行排列显示以及排列计算  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 关于各种排列组合java算法实现方法

  一利用二进制状态法求排列组合此种方法比较容易懂但是运行效率不高小数据排列组合可以使用复制代码代码如下:importjavautilArrays;  //利用二进制算法进行全排列//count://

知识大全 为什么排列~组合~概率~的数学题这么难类~~给点技巧~~重重有赏~

为什么排列~组合~概率~的数学题这么难类~~给点技巧~~重重有赏~!解答排列组合问题,首先必须认真审题,明确是属于排列问题还是组合问题,或者属于排列与组合的混合问题,其次要抓住问题的本质特征,灵活运用

知识大全 Java面向对象的排列组合算法

Java面向对象的排列组合算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  packageTe