【问题标题】:creating k-elements set from 1-element set [duplicate]从 1 元素集创建 k 元素集
【发布时间】:2013-06-11 22:58:49
【问题描述】:

我在 java 中声明了一个 ArrayList a = [1,2,3,4,5]。我使用下面的循环创建了另一个 ArrayList b:

for(int i = 0; i<a.size(); i++)
{
      for(int j=i+1; j<a.size();j++)
      {
              b.add("{" + a.get(i)+ "," + a.get(j) + "}");
      }
}

现在 ArrayList b 将包含元素 [{1,2},{1,3},{1,4},{1,5},{2,3},{2,4},{2, 5},{3,4},{3,5},{4,5}]。现在,如果我使用 System.out.println(b.get(0)) 打印语句,则输出将为 {1,2}。

现在,我想从 2 元素集 c = [{1,2,3},{1,2,4},{1,2,5},{2,3 ,4},{2,3,5},{3,4,5}]。

再次,我想从上面的 3 元素集创建 4 元素集 d = [{1,2,3,4}, {1,2,3,5},{1,2,4 ,5},{2,3,4,5}]

再次我想创建 5 元素集合 lilkewise... 我该如何修改上述循环系统来实现它?

【问题讨论】:

    标签: java for-loop data-mining apriori


    【解决方案1】:

    我已经编写了一个递归方法来为你做一个数字数组的所有排列:

    public static void main(String ... args) {
        List<Integer> numbers= new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);
    
        for (int i=0; i<numbers.size(); i++) {
            dfs(numbers.get(i), numbers, new ArrayList<Integer>(), numbers.size(), 0);
        }
    }
    
    private static List<List<Integer>> resultOfResults= new ArrayList<>();
    
    private static void dfs(int startNumber, List<Integer> numbers, List<Integer> result, int depth, int currentDepth) {
        result.add(startNumber);
        for (int i= 0; i < numbers.size(); i++) {
            if (!result.contains(numbers.get(i))) {
                dfs(numbers.get(i), numbers, new ArrayList<Integer>(result), depth, currentDepth + 1);
            }
        }
        if (currentDepth + 1 == depth) { 
            resultOfResults.add(result);
            return;
        }
    }
    

    然后,只需遍历 resultOfResults 并打印每个数组:

    for (List<Integer> result : resultOfResults) {
        System.out.println(Arrays.toString(result.toArray()));
    }
    

    【讨论】:

    • 谢谢!!我一定会尝试的!
    • 为什么显示Java不支持菱形运算符的消息?它说我的源是 1.6,并要求我使用源 7。如何做到这一点?
    • 啊哈,不要使用菱形运算符,而是使用 List&lt;Integer&gt; numbers= new ArrayList&lt;&gt;(); 代替 List&lt;Integer&gt; numbers= new ArrayList&lt;Integer&gt;(); 。同样适用:而不是 private static List&lt;List&lt;Integer&gt;&gt; resultOfResults= new ArrayList&lt;&gt;(); 而是 private static List&lt;List&lt;Integer&gt;&gt; resultOfResults= new ArrayList&lt;List&lt;Integer&gt;&gt;();
    • 我做了:私有静态 List> resultOfResult = new ArrayList(); (没有菱形运算符)并且它起作用了。
    • 但我的问题不在于寻找排列。正如我上面所说的那样。你也可以给我一个解决方案吗?
    【解决方案2】:
    1. 将其放入一个需要两组 s1s2 的方法中。
    2. 要生成b,只需调用带有(a, a)的方法即可。
    3. 要生成c,只需使用(a, b)(b,a) 调用方法即可。
    4. 随意重复。

    您只需添加一些逻辑即可从集合中的项目中删除}{。或者,根本不要放置它们,仅将它们用于打印结果。

    【讨论】:

    • 这实际上是个好主意。没考虑过....我会试试的!!!
    猜你喜欢
    • 2016-02-26
    • 1970-01-01
    • 2018-12-08
    • 2011-05-05
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    相关资源
    最近更新 更多