从1元素集创建k元素集

时间:2013-06-15 11:07:41

标签: java for-loop data-mining apriori

我在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个元素集创建3个元素集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 ...如何修改上面的循环系统来实现呢?

2 个答案:

答案 0 :(得分:0)

  1. 将其放在一个方法中,该方法需要两组s1s2
  2. 要生成b,只需使用(a, a)
  3. 调用该方法
  4. 要生成c,只需使用(a, b)(b,a)调用该方法。
  5. 随意重复。
  6. 您只需添加一些逻辑即可从集合中的项目中删除}{。或者,不要将它们放在一起,仅用于打印结果。

答案 1 :(得分:0)

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

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()));
}