zoukankan      html  css  js  c++  java
  • 找到所有排序组合算法

    算法思想是这样的。假设原始数据是N个字符串,且 N>=4。

    这里假设数据是:1,2,3,4

    首先找到所有的2项组合,即12,13,14,23,24,34。找的方法是这样的,先取出数据的第一项,即1,然后和后面所有的组合,即12,13,14。再取出数据的第二项,和后面的去组合,即23,24。接下来按同样的方法得到,34.

    接下来我们去3项集合。也是首先取到数据的一项,即1,然后和2项集的从23开始的每一项去组合,即123,124,134. 然后在取出数据的第二项,即2,和34开始后的每一项去组合,即234.

    依照此方法,就可以去到任意的长度的数据的所有组合。

    这里是用JAVA实现的代码。

    //原始数据
    List<String> ids = new ArrayList<String>(Arrays.asList("1", "2", "3", "4"));
    // 保存结果
    List<HashSet<String>> res = new ArrayList<HashSet<String>>();
    // 保存上一次的数据
    List<HashSet<String>> pre = new ArrayList<HashSet<String>>();
    
    for (int i = 1; i <= ids.size(); i++) {
        // 保存本次数据
        List<HashSet<String>> tm = new ArrayList<HashSet<String>>();
        int m = 0;
    
        for (int ii = 0; ii < ids.size(); ii++) {
            if (i != 1) {
                for (int iii = m; iii < pre.size(); iii++) {
                    if (!pre.get(iii).contains(ids.get(ii))) {
                        HashSet<String> t = new HashSet<String>(Arrays.asList(ids
                                .get(ii)));
                        t.addAll(pre.get(iii));
                        tm.add(t);
                    } else
                        m++;
                }
            } else
                tm.add(new HashSet<String>(Arrays.asList(ids.get(ii))));
        }
        res.addAll(tm);
        pre.clear();
        pre.addAll(tm);
    }
    
    System.out.println(res.size());
    System.out.println(res);

    运行结果。

    15
    [[1], [2], [3], [4], [2, 1], [3, 1], [1, 4], [3, 2], [2, 4], [3, 4], [3, 2, 1], [2, 1, 4], [3, 1, 4], [3, 2, 4], [3, 2, 1, 4]]
  • 相关阅读:
    arguments.callee
    vue的生命周期
    Vue中的v-cloak用法
    控制input只能输入数字和两位小数
    css3新单位vw、vh的使用详解
    关于图片的Base64编码
    Logic and Fault simulation
    scan design flow(二)
    scan design flow(一)
    异构计算
  • 原文地址:https://www.cnblogs.com/yuxing/p/2148641.html
Copyright © 2011-2022 走看看