- 浏览: 531366 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (230)
- java (87)
- c/c++/c# (39)
- ASP.net MVC (4)
- eclipse/visual studio (3)
- tomcat/weblogic/jetty (13)
- linux/unix/windows (20)
- html/javascript/jquery/kendo/bootstrap/layui/vue/react (31)
- hibernate/struts/spring/mybatis/springboot (21)
- lucene/solr/ELK (2)
- shiro (0)
- oracle/sqlserver/mysql/postgresql (23)
- shell/python/ruby (6)
- android (0)
- maven/ant (1)
- freemarker/thymeleaf/velocity (1)
- open source project (41)
- cache/memcached/redis (0)
- nosql/hadoop/hbase/mongodb (0)
- system architecture/dubbo/zookeeper (0)
- software testing (0)
- system optimization (0)
- system security (0)
- tcp/udp/http (2)
- roller/wordpress (2)
- 工具收藏 (8)
- 文摘 (4)
- 生活 (0)
最新评论
-
coconut_zhang:
这个demo 非常完整了,是指下面说的那个html 模版,模版 ...
flying sauser, thymeleaf实现PDF文件下载 -
a93456:
你好,你有完整的demo吗? String template这 ...
flying sauser, thymeleaf实现PDF文件下载 -
yujiaao:
fn 函数循环是没有必要的啊,可以改成
protecte ...
Java 笛卡尔积算法的简单实现 -
安静听歌:
设置了.setUseTemporaryFileDuringWr ...
使用jxl导出大数据量EXCEL时内存溢出的解决办法 -
q280499693:
写的很详细,但是我现在想知道他们是怎么定位log4j.prop ...
关于SLF4J结合Log4j使用时日志输出与指定的log4j.properties不同
笛卡尔积算法的Java实现:
(1)循环内,每次只有一列向下移一个单元格,就是CounterIndex指向的那列。
(2)如果该列到尾部了,则这列index重置为0,而CounterIndex则指向前一列,相当于进位,把前列的index加一。
(3)最后,由生成的行数来控制退出循环。
public class Test { private static String[] aa = { "aa1", "aa2" }; private static String[] bb = { "bb1", "bb2", "bb3" }; private static String[] cc = { "cc1", "cc2", "cc3", "cc4" }; private static String[][] xyz = { aa, bb, cc }; private static int counterIndex = xyz.length - 1; private static int[] counter = { 0, 0, 0 }; public static void main(String[] args) throws Exception { for (int i = 0; i < aa.length * bb.length * cc.length; i++) { System.out.print(aa[counter[0]]); System.out.print("\t"); System.out.print(bb[counter[1]]); System.out.print("\t"); System.out.print(cc[counter[2]]); System.out.println(); handle(); } } public static void handle() { counter[counterIndex]++; if (counter[counterIndex] >= xyz[counterIndex].length) { counter[counterIndex] = 0; counterIndex--; if (counterIndex >= 0) { handle(); } counterIndex = xyz.length - 1; } } }
输出共2*3*4=24行:
aa1 bb1 cc1
aa1 bb1 cc2
aa1 bb1 cc3
aa1 bb1 cc4
aa1 bb2 cc1
aa1 bb2 cc2
aa1 bb2 cc3
aa1 bb2 cc4
aa1 bb3 cc1
aa1 bb3 cc2
aa1 bb3 cc3
aa1 bb3 cc4
aa2 bb1 cc1
aa2 bb1 cc2
aa2 bb1 cc3
aa2 bb1 cc4
aa2 bb2 cc1
aa2 bb2 cc2
aa2 bb2 cc3
aa2 bb2 cc4
aa2 bb3 cc1
aa2 bb3 cc2
aa2 bb3 cc3
aa2 bb3 cc4
-------------------------------------------------------------------------------------------------------------------------------
最近碰到了一个笛卡尔积的算法要求,比如传递过来的参数是"1,3,6,7==4,5,8,9==3,4==43,45,8,9==35,4",则返回的是一个list,如[1,4,3,43,35][1,4,3,43,4][1,4,3,45,35]……,该list包含是4*4*2*4*2=256个元素,现在的思路是这样的:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class DescartesTest {
/**
* 获取N个集合的笛卡尔积
*
* 说明:假如传入的字符串为:"1,2,3==5,6==7,8"
* 转换成字符串数组为:[[1, 2, 3], [5, 6], [7, 8]]
* a=[1, 2, 3]
* b=[5, 6]
* c=[7, 8]
* 其大小分别为:a_length=3,b_length=2,c_length=2,
* 目标list的总大小为:totalSize=3*2*2 = 12
* 对每个子集a,b,c,进行循环次数=总记录数/(元素个数*后续集合的笛卡尔积个数)
* 对a中的每个元素循环次数=总记录数/(元素个数*后续集合的笛卡尔积个数)=12/(3*4)=1次,每个元素每次循环打印次数:后续集合的笛卡尔积个数=2*2个
* 对b中的每个元素循环次数=总记录数/(元素个数*后续集合的笛卡尔积个数)=12/(2*2)=3次,每个元素每次循环打印次数:后续集合的笛卡尔积个数=2个
* 对c中的每个元素循环次数=总记录数/(元素个数*后续集合的笛卡尔积个数)=12/(2*1)=6次,每个元素每次循环打印次数:后续集合的笛卡尔积个数=1个
*
* 运行结果:
* [[1, 2, 3], [5, 6], [7, 8]]
1,5,7,
1,5,8,
1,6,7,
1,6,8,
2,5,7,
2,5,8,
2,6,7,
2,6,8,
3,5,7,
3,5,8,
3,6,7,
3,6,8]
从结果中可以看到:
a中的每个元素每个元素循环1次,每次打印4个
b中的每个元素每个元素循环3次,每次打印2个
c中的每个元素每个元素循环6次,每次打印1个
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str ="1,3,6,7==4,5,8,9==3,4==43,45,8,9==35,4";
List<String> result = descartes(str);
System.out.println(result);
}
@SuppressWarnings("rawtypes")
public static List<String> descartes(String str) {
String[] list = str.split("==");
List<List> strs = new ArrayList<List>();
for(int i=0;i<list.length;i++){
strs.add(Arrays.asList(list[i].split(",")));
}
System.out.println(strs);
int total = 1;
for(int i=0;i<strs.size();i++){
total*=strs.get(i).size();
}
String[] mysesult = new String[total];
int now = 1;
//每个元素每次循环打印个数
int itemLoopNum = 1;
//每个元素循环的总次数
int loopPerItem =1;
for(int i=0;i<strs.size();i++){
List temp = strs.get(i);
now = now*temp.size();
//目标数组的索引值
int index=0;
int currentSize = temp.size();
itemLoopNum = total/now;
loopPerItem = total/(itemLoopNum*currentSize);
int myindex = 0;
for(int j=0;j<temp.size();j++){
//每个元素循环的总次数
for(int k=0;k<loopPerItem;k++){
if(myindex==temp.size())
myindex=0;
//每个元素每次循环打印个数
for(int m=0;m<itemLoopNum;m++){
mysesult[index]=(mysesult[index]==null?"":mysesult[index]+",")+((String)temp.get(myindex));
index++;
}
myindex++;
}
}
}
return Arrays.asList(mysesult);
}
}
-------------------------------------------------------------------------------------------------------------------------------
递归:
public static void fn(List<String[]> list,String[] arr,String str){
//迭代list
List<String> li = new ArrayList<String>();
for(int i=0;i<list.size();i++){
//取得当前的数组
if(i==list.indexOf(arr)){
//迭代数组
System.out.println(arr.length);
for(String st : arr){
st = str + st;
if(i<list.size()-1){
fn(list,list.get(i+1),st);
}else if(i==list.size()-1){
li.add(st);
}
}
}
}
for(int i = 0 ; i < li.size();i++ )
{
System.out.println(li.get(i));
}
}
评论
protected static List<String> fn(List<Object[]> list, Object[] arr, String result, String separator) { //迭代list List<String> li = new ArrayList<String>(); //取得当前的数组 int i = list.indexOf(arr); //迭代数组 for (Object st : arr) { if (StringUtils.isNotBlank(result)) { st = result + separator + st; } if (i < list.size() - 1) { li.addAll(fn(list, list.get(i + 1), st.toString(), separator)); } else if (i == list.size() - 1) { li.add(st.toString()); } } return li; }
发表评论
-
easypoi 按照模板到出excel并合并单元格
2022-11-10 21:46 105这是entity类,注解的mergeVertical是纵向合 ... -
Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat
2017-03-31 14:59 1279一、概述 1、问题描述 使用Java处 ... -
jxls操作excel文件
2017-03-03 14:51 1013JXLS是基于Jakarta POI API的Excel报表 ... -
eclipse插件Maven添加依赖查询无结果的解决方法(Select Dependency doesn't work)
2016-04-22 08:33 693在eclipse中用过maven的可能都遇到过这种情况,我 ... -
Java_Ant详解
2015-06-15 16:54 6871,什么是antant是构建工 ... -
httpClient通过代理(Http Proxy)进行请求
2014-09-16 14:18 1150httpClient通过代理(Http Proxy)进行请求 ... -
httpclient上传文件及传参数
2014-09-16 11:07 11507用到的包有commons-httpclient-3.0.1. ... -
Java文件下载的几种方式
2013-08-19 14:15 835public HttpServletResponse dow ... -
http上传文件深度解析-高性能http传输
2013-07-23 10:41 9718最近在做web服务器的时候将一些应用集成在了服务器里面,比 ... -
java servlet common-fileupload 实现的文件批量上传
2013-07-18 14:31 6362结合前辈们的代码, 写了个用servlet 和 common ... -
调用axis2 WebService三种方法
2013-06-28 13:41 1743第一:简单的使用axis2包自己实现调用 package ... -
java-jsch实现sftp文件操作
2013-06-26 13:55 3613(曾在天涯)的文章详细讲解了jsch中的函数以及用法 ht ... -
url encode的问题
2012-11-06 08:27 58861.urlencode和decode 字符的编码和解码在有中 ... -
Java集合运算(交集,并集,差集)
2012-11-02 14:59 12931在实现数据挖掘一些算法或者是利用空间向量模型来发现相似文档的时 ... -
使用jxl导出大数据量EXCEL时内存溢出的解决办法
2012-11-02 14:05 11688POI或者JXL在导出大量数据的时候,由于它们将每一个单元格生 ... -
java实现求一个项目集合任意元子集的通用算法
2012-10-31 15:25 4在关联规则挖掘过程中,经常涉及到求一个频繁项目集的n元子集,在 ... -
java实现求一个项目集合任意元子集的通用算法
2012-10-31 15:21 1452在关联规则挖掘过程中,经常涉及到求一个频繁项目集的n元子集,在 ... -
使用 HttpClient 和 HtmlParser 实现简易爬虫
2012-06-27 16:33 1241这篇文章介绍了 HtmlParse ... -
分布式计算开源框架Hadoop入门
2012-06-26 13:29 1944引 在SIP项 ... -
CAS集群部署的问题
2012-06-26 09:17 2848CAS单点部署时非常容易配置,且稳定性较好,非常适合中小规模应 ...
相关推荐
主要介绍了Java笛卡尔积算法原理与实现方法,结合实例形式较为详细的分析了笛卡尔积算法的原理及java定义与使用笛卡尔积算法的相关操作技巧,需要的朋友可以参考下
主要介绍了Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法,结合实例形式分析了Java使用递归与循环两种方式实现未知维度集合的笛卡尔积相关概念、原理与操作技巧,需要的朋友可以参考下
js 笛卡尔积算法的实现代码,据对象或者数组生成笛卡尔积,并介绍了一个javascript多重数组笛卡尔积的例子,以及java实现笛卡尔积的算法与实例代码。 一、javascript笛卡尔积算法代码 例子,根据对象或者数组生成...
本文实例讲述了javascript笛卡尔积算法实现方法。分享给大家供大家参考。具体分析如下: 这里可根据给的对象或者数组生成笛卡尔积 //笛卡儿积组合 function descartes(list) { //parent上一级索引;count指针计数 ...
说明:本人前段时间遇到的求n个数组的所有排列组合的问题,发现笛卡尔积算法可以解决,但是网上搜索的只有Java版本的实现,于是自己试着用python实现,由于新手代码不太规范。 代码:本人封装了一个类Cartesian...
java写的笛卡尔心形图,里边用了笛卡尔算法,代码不多..
tle卫星轨道数据转成笛卡尔系坐标
使用ISAP算法进行二分图匹配 Bigraph-Matching(Improved-Shortest-Augmenting-Path) 普通的二叉搜索树 Binary-Search-Tree 广度优先搜索 Breadth-First-Search 冒泡排序 Bubble-Sort 桶排序 Bucket-Sort 笛卡尔树 ...
该项目包括用于程序分析领域的库和应用程序的集合。 起点是使用Agesen的笛卡尔积算法对Java程序进行类型分析。
上面的例子可以这样表示A>BB>C在社交网络任何一个活跃的用户U都存在对应的两个集合,一个是粉丝集合,一个是关注集合,以用户U作为中间联系的2度人脉对,是粉丝集合和关注集合的笛卡尔积。于是在M
笛卡尔积组 戒指 数学提供以下代数环和字段: 布尔环 笛卡尔积环 形式为x ^ d + c的多项式的字段扩展类 整数环 多项式环 素数p的环Zn和场Zp 其它功能 数学还实现了许多其他功能: 多幂运算算法 递延评估组操作以自动...
算法上 用几种不同语言编写的几种算法,使用 unix time() 和 D3 JS poop 进行图形化和描述 ###灵感 取自和一个关于算法和 BigO 符号的失败采访 ###算法检查 ####搜索 深度优先搜索 (DFS) 广度优先搜索 (BFS) 二...
我们还将展示用于以各种编程语言实现这些数据结构的方法。 例如Java,C,C ++,Golang,Python3,JavaScript 如何使用 如果您愿意,可以通过以下内容参考在我们的存储库中进行浏览。 或者,您可以简单地在系统中...
给定一组城市和一组值,这些值对应于该组城市及其自身的笛卡尔积中的每个元素。 每个值表示对应对的两个元素之间的距离。 将使用遗传算法从解决方案池中选择多个解决方案,并通过使用适应度函数确定哪个解决方案...
这段代码本来是一道比较经典的算法题,有很多种方法可以解决,比如直接对所有数组加起来做全排列,或者每个数组选一个数做,哪怕直接调用Python的函数直接算笛卡尔积都可以,网上有很多类似的资源。但是这些方法存在...
这样做的自然,天真的算法会计算两个表的笛卡尔积,然后丢弃与错误的区块组相对应的行。 由于Hive不支持空间索引,因此它将评估此查询: create table default.overlap as select io.*, cg.geoid from default....
Sunpy 的实现基于 Thompson (2006), A&A, 449, 791 PDF 支持的转换至高光H C C 高压电H G R T N F 电阻哦米斯托尼赫斯特日光坐标 (HG) X ✓ ✓ 日心笛卡尔坐标 (HCC) ✓ X ✓ ✓ 日射-笛卡尔坐标 (HPC) ✓ ✓ X ...
“天气观测”挑战 参见: : 需求的假设和简化 为了完成挑战,做了一些假设。... 只要算法尊重前一项,算法将始终优先考虑最简单的方法来解决问题。 只有在两种或两种以上情况都可以利用时才采用Generization
这段代码在正笛卡尔平面上生成一个随机的、封闭的迷宫,如下图所示。 (0,0) ----------> X | | | Positive Plane | v Y 它采用的算法是从完全封闭迷宫中的每个单元格开始。 检查迷宫中的随机墙,如果墙两侧的...
此代码以笛卡尔坐标中的一组给定 (x,y) 点为输入,并返回包围这些点的最小圆的中心和半径。 这段代码基于 Yazan Ahed 的代码,在算法上没有变化,只在结构上有变化。 前面的代码是基于这里找到的非常好的 Java 小...