递归算法:
/** * 求排列(递归) * @param result 最终排列结果 * @param out 已经排列内容 * @param target 需要排列的数据集合 * @param m 排列元素个数 * * 待解决:1 大数据 溢出 () 2 使用多线程提速排列过程 * * */ public static void f(List<String> result, String out, List<String> target, int m) { if(m == 0) { result.add(out); System.out.println(out); } else { for (int i=0; i<target.size(); i++) { List<String> tem = getSubList(target,i); f(result, out + target.get(i), tem, m-1); } } } /** * 求排除第i个元素的子集 * @param target * @param i * @return */ private static List<String> getSubList(List<String> target, int i) { List<String> temp = new ArrayList<String>(); temp.addAll(target); temp.remove(i); return temp; }
调用:
public static void main(String[] args) { List<String> list = new ArrayList<String>(); String[] arr = "1 2 3 4 5 6 7 8 9 0 A B C D E F G".split(" "); Collections.addAll(list, arr); List<String> result = new ArrayList<String>(); int len = arr.length; int m = 17; long timer = System.currentTimeMillis(); f(result, "", list, m); timer = System.currentTimeMillis() - timer; System.out.println("A("+m+","+len+") size="+result.size()+" timer="+timer); }
时间: 2024-11-13 09:31:53