本文实例讲述了java基于递归和循环两种方式实现未知维度集合的笛卡尔积。分享给大家供大家参考,具体如下:
什么是笛卡尔积?
在数学中,两个集合x和y的笛卡儿积(cartesian product),又称直积,表示为x × y,第一个对象是x的成员而第二个对象是y的所有可能有序对的其中一个成员。
假设集合a={a,b},集合b={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。
如何用程序算法实现笛卡尔积?
如果编程前已知集合的数量,通过程序的多次循环即可得出笛卡尔积。但是如果编程前不知道集合的数量,如何得到笛卡尔积哪?比如集合表示list < list> list;这个list在编程前list的数量是未知的。下面的代码使用递归和循环两种方法实现未知维度集合的笛卡尔积:
import java.util.arraylist;
import java.util.arrays;
import java.util.list;
/**
* 循环和递归两种方式实现未知维度集合的笛卡尔积
* created on 2015-05-22
* @author luweijie
*/
public class descartes {
/**
* 递归实现dimvalue中的笛卡尔积,结果放在result中
* @param dimvalue 原始数据
* @param result 结果数据
* @param layer dimvalue的层数
* @param curlist 每次笛卡尔积的结果
*/
private static void recursive (list> dimvalue, list> result, int layer, list curlist) {
if (layer < dimvalue.size() - 1) {
if (dimvalue.get(layer).size() == 0) {
recursive(dimvalue, result, layer + 1, cu