Java

Java笛卡尔积的迭代实现方式有哪些

小樊
87
2024-08-11 00:57:41
栏目: 编程语言

在Java中,实现笛卡尔积的迭代方式有以下几种:

  1. 使用多重循环:最简单的方式是使用多重循环来实现笛卡尔积。每个循环对应一个集合,通过嵌套循环的方式遍历每个集合的元素,从而得到笛卡尔积。
List<List<Integer>> sets = Arrays.asList(
        Arrays.asList(1, 2),
        Arrays.asList(3, 4),
        Arrays.asList(5, 6)
);

List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<>());

for (List<Integer> set : sets) {
    List<List<Integer>> newResult = new ArrayList<>();
    for (List<Integer> list : result) {
        for (Integer integer : set) {
            List<Integer> newList = new ArrayList<>(list);
            newList.add(integer);
            newResult.add(newList);
        }
    }
    result = newResult;
}

for (List<Integer> list : result) {
    System.out.println(list);
}
  1. 使用递归:可以使用递归的方式来实现笛卡尔积。递归函数的参数可以包括当前集合的索引和已经生成的笛卡尔积列表。
public static List<List<Integer>> cartesianProduct(List<List<Integer>> sets, int index) {
    List<List<Integer>> result = new ArrayList<>();
    if (index == sets.size()) {
        result.add(new ArrayList<>());
    } else {
        for (Integer integer : sets.get(index)) {
            for (List<Integer> list : cartesianProduct(sets, index + 1)) {
                List<Integer> newList = new ArrayList<>(list);
                newList.add(integer);
                result.add(newList);
            }
        }
    }
    return result;
}

List<List<Integer>> sets = Arrays.asList(
        Arrays.asList(1, 2),
        Arrays.asList(3, 4),
        Arrays.asList(5, 6)
);

List<List<Integer>> result = cartesianProduct(sets, 0);

for (List<Integer> list : result) {
    System.out.println(list);
}

以上是两种常见的实现笛卡尔积的迭代方式,可以根据实际情况选择合适的方式来实现。

0
看了该问题的人还看了