失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java 笛卡尔积_笛卡儿积的java实现

java 笛卡尔积_笛卡儿积的java实现

时间:2022-04-23 18:37:19

相关推荐

java 笛卡尔积_笛卡儿积的java实现

在网上查了很多笛卡儿积的乘积,感觉程序都写得比较复杂,当看到上面的文章的时候,感觉豁然开朗,通俗易懂,所以,在笔者的代码下,将代码整理了一下。

首先,需要理解的是,笛卡尔积:多个集合的乘积。

我们可以想到如果,是两个集合的乘积,如何做运算呢?就是将前一个集合复制(后一个集合的元素数量)份,得到一个新的集合,然后遍历集合,与后一个集合做连接。

知道了两个集合的相乘,我们来看看3个集合相称,我们可以先算前两个集合的乘积,算出来的新的集合,再与下一个集合相称,这样,我们每次做运算本质都是两个集合的乘积。话不多说,直接看代码:

import java.util.ArrayList;

/**

* @author

* @create -04-04 19:21

**/

public class Test {

/**

* 计算 多个集合的笛卡尔积

* @param dimValues 存储多个集合的 二维list

* @return

*/

private static ArrayList descartes(ArrayList> dimValues) {

ArrayList result = new ArrayList();

for (int i = 0 ; i < dimValues.size() ; i++){

ArrayList curList = dimValues.get(i);

if(0 == i){//如果是首个集合,直接放输入到结果集中

for (String tempStr : curList){

result.add(tempStr);

}

continue;

}

selfCopy(result,curList);//将前一个集合的乘积 result,自我复制 curListCount 份,并将当前集合的元素追加到上边

}

return result;

}

/**

* 根据当前的集合,将之前的结果集复制

* @param result之前的集合相称的结果集

* @param curList当前集合

*/

private static void selfCopy(ArrayList result,ArrayList curList) {

ArrayList tempList = new ArrayList();

for (String strOfCurList : curList){

for (String strOfResult : result){

tempList.add( strOfResult + strOfCurList );//因为这里是字符串集合相称,那么其实就是字符串相加。

}

}

result.clear();

for (String tempStr : tempList){

result.add(tempStr);

}

}

public static void main(String[] args) {

ArrayList a = new ArrayList();

a.add("a1");

a.add("a2");

ArrayList b = new ArrayList();

b.add("b1");

b.add("b2");

ArrayList c = new ArrayList();

c.add("c1");

c.add("c2");

c.add("c3");

ArrayList d = new ArrayList();

d.add("d1");

d.add("d2");

d.add("d3");

ArrayList> dimValue = new ArrayList>();

dimValue.add(a);

dimValue.add(b);

dimValue.add(c);

dimValue.add(d);

ArrayList result = descartes(dimValue);

for (String temp : result){

System.out.println(temp);

}

}

}

这种实现,个人觉得是不是比较通俗易懂,欢迎大家纠正其中未发现的错误。。。

如果觉得《java 笛卡尔积_笛卡儿积的java实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。