Java实现排列组合算法.docx_第1页
Java实现排列组合算法.docx_第2页
Java实现排列组合算法.docx_第3页
Java实现排列组合算法.docx_第4页
Java实现排列组合算法.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java实现排列组合算法第一部分:java实现排列算法具体的代码.?import java.util.ArrayList; /* * java实现排列算法 * */public class ArrangeTest private int total = 0; private ArrayList arrangeList = new ArrayList(); public Arrange() /* * 交换方法的实现 */private void swap(String list, int k, int i) String c3 = listk; listk = listi; listi = c3; /* * perm方法的实现 */public void perm(String list, int k, int m) if (k m) StringBuffer sb = new StringBuffer(); for (int i = 0; i 0) sb.setLength(sb.length()-1); arrangeList.add(sb.toString(); total+; else for (int i = k; i = m; i+) swap(list, k, i); perm(list, k + 1, m); swap(list, k, i); /* * 获得总数 */public int getTotal() return total; public ArrayList getArrangeList() return arrangeList; /* * main方法的实现 */public static void main(String args) String list = 1, 2, 3, 4, 5 ; ArrangeTest ts = new ArrangeTest (); ts.perm(list, 0, list.length-1); for (int i = 0; i ts.getArrangeList().size(); i+) System.out.println(ts.getArrangeList().get(i); System.out.println(total: + ts.total); 第二部分、组合算法的实现?import java.util.ArrayList; import java.util.BitSet; /* * java组合算法的实现 * */public class Combination private ArrayList combList= new ArrayList(); /* *mn方法的实现 * */public void mn(String array, int n) int m = array.length; if (m n) throw new IllegalArgumentException(Error m n); BitSet bs = new BitSet(m); for (int i = 0; i n; i+) bs.set(i, true); do printAll(array, bs); while (moveNext(bs, m); /*说明 这个方法不太容易理解,也是组合的核心算法,下面进行简单的讲解. * 1、start是从第一个true片段作为起始位,end作为截止位 * 2、第一个true片段都设置成false * 3、数组从0下标起始到以第一个true片段元素数量减一为下标的位置都置true * 4、把第一个true片段end截止位置true * * param bs 数组是否显示的标志位 * param m 数组长度 * return boolean 是否还有其他组合 */private boolean moveNext(BitSet bs, int m) int start = -1; while (start = m) return false; int end = start; while (end = m) return false; for (int i = start; i end; i+) bs.set(i, false); for (int i = 0; i end - start - 1; i+) bs.set(i); bs.set(end); return true; /* * 输出打印结果 * * param array 数组 * param bs 数组元素是否显示的标志位集合 */private void printAll(String array, BitSet bs) StringBuffer sb = new StringBuffer(); /拼接StringBuffer,这个地方一定要用StringBuffer,不要直接使用String 的+ for (int i = 0; i array.length; i+) if (bs.get(i) sb.append(arrayi).append(,); sb.setLength(sb.length() - 1); combList.add(sb.toString(); public ArrayList getCombList() return combList; /* * 主方法测试 * */public static void main(String args) throws Exception Combination comb = new Combination(); comb.mn(new String1,2,3,4,5,6, 3); for (int i = 0; i comb.getCombList().size(); i+) System.out.println(comb.getCombList().get(i); String list = comb.getCombList().get(i).split(,); Arrange ts = new Arrange(); ts.perm(list, 0, list.length-1); for (int j = 0; j ts.getArrangeList().size(); j+) System.out.println(u0009+ts.getArrangeList().get(j); 第三部分、实现排列组合算法调用的工具类?import java.util.ArrayList; /* * 调用组合算法的工具类 * */public class ArrangeCombine public static ArrayList getArrangeOrCombine(String args,int n, boolean isArrange) throws Exception if (args.length=0) throw new Exception(array.lengthargs.length) throw new Exception( narray.length); Combination comb = new Combination(); comb.mn(args, n); if (!isArrange) return comb.getCombList(); ArrayList arrangeList = new ArrayList(); for (int i = 0; i comb.getCombList().size(); i+) String list = comb.getCombList().get(i).split(,); Arrange ts = new Arrange(); ts.perm(list, 0, list.length-1); for (int j = 0; j ts.getArrangeList().size(); j+) arrangeList.add(ts.getArrangeList().get(j); return arrangeList; /main方法的实现 public static void main(String args) try ArrayList arrangeOrCombine = ArrangeCombine.getArrangeOrCombine(new String1,2,3,4,5,6, 3, false); ArrayList arrangeOrCombine2 = ArrangeCombine.getArrangeOrCombine(new String1,2,3,4,5,6, 3, true); for (int i = 0; i arrangeOrCombine.size(); i+) System.out.println(arrangeOrCombine.get(i); System.out.println(Total:+arrangeOrCombine.size(); System.o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论