• 找到所有排序组合算法


    算法思想是这样的。假设原始数据是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]]
  • 相关阅读:
    程序书写规范
    点灯主要顺序
    复用功能重映射
    STM32 (战舰)
    html5 javascript 新增加的高级选择器更精准更实用
    html5 javascript 事件练习3键盘控制练习
    html5 javascript 事件练习3随机键盘
    html5 javascript 事件练习2
    html5 javascript 事件练习1
    html5dom2
  • 原文地址:https://www.cnblogs.com/yuxing/p/2148641.html
Copyright © 2020-2023  润新知