`
QYao2012
  • 浏览: 5985 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java实现笛卡尔积

    博客分类:
  • Java
阅读更多
    /** 
     * 笛卡尔积工具类. 
     *    
     * 
     * <!-- 
     * 
     * 历史记录: 
     * ---------------------------------------------------------------------------- 
     * 2012-3-5,啸白腥,新建文档 
     * 
     * --> 
     * 
     * @author 啸白腥 
     * @since $Rev$ 
     * 
     */  
    public class CrossUtils {  
       
      // ~ Static Fields  
      // ==========================================================================  
       
      // ~ Fields  
      // ==========================================================================  
       
      // ~ Constructors  
      // ==========================================================================  
       
      // ~ Methods  
      // ==========================================================================  
         
      /** 
       * 产生笛卡尔积组合. 
       * 
       * @param crossArgs 信息组合。 
       *  <pre> 
       *  格式:{ 
       *          { 1, 2, 3 }, 
       *          { a, b, c, d }, 
       *          { A, B, C }, 
       *          ... 
       *    } 
       * </pre> 
       * 
       * @return 笛卡尔积组合结果 
       */  
      public static List<List<String>> cross(List<List<String>> crossArgs) {  
       
        // 计算出笛卡尔积行数  
        int rows = crossArgs.size() > 0 ? 1 : 0;  
       
        for (List<String> data : crossArgs) {  
          rows *= data.size();  
        }  
       
        // 笛卡尔积索引记录  
        int[] record = new int[crossArgs.size()];  
       
        List<List<String>> results = new ArrayList<List<String>>();  
       
        // 产生笛卡尔积  
        for (int i = 0; i < rows; i++) {  
          List<String> row = new ArrayList<String>();  
            
          // 生成笛卡尔积的每组数据  
          for (int index = 0; index < record.length; index++) {  
            row.add(crossArgs.get(index).get(record[index]));  
          }  
            
          results.add(row);  
          crossRecord(crossArgs, record, crossArgs.size() - 1);  
        }  
       
        return results;  
      }  
       
      /** 
       * 产生笛卡尔积当前行索引记录. 
       * 
       * @param sourceArgs 要产生笛卡尔积的源数据 
       * @param record 每行笛卡尔积的索引组合 
       * @param level 索引组合的当前计算层级 
       */  
      private static void crossRecord(List<List<String>> sourceArgs, int[] record, int level) {  
        record[level] = record[level] + 1;  
       
        if (record[level] >= sourceArgs.get(level).size() && level > 0) {  
          record[level] = 0;  
          crossRecord(sourceArgs, record, level - 1);  
        }  
      }  
    }  
分享到:
评论

相关推荐

    Java笛卡尔积算法原理与实现方法详解

    Java实现笛卡尔积算法可以使用递归和循环两种方法。下面给出一个示例代码: public class Test { private static String[] aa = {"aa1", "aa2"}; private static String[] bb = {"bb1", "bb2", "bb3"}; private ...

    Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例

    如何用程序算法实现笛卡尔积? 如果编程前已知集合的数量,通过程序的多次循环即可得出笛卡尔积。但是如果编程前不知道集合的数量,如何得到笛卡尔积哪?为了解决这个问题,Java提供了两种方式实现未知维度集合的...

    从n个数组中取出所有排列组合(Java实现)

    总结来说,从n个数组中取出所有排列组合的Java实现涉及到递归算法、回溯法以及数据结构的操作。理解这些概念并能够熟练运用是成为一名优秀程序员的关键。通过这个例子,我们可以看到如何利用Java的灵活性和表达力来...

    Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例

    说明:本人前段时间遇到的求n个数组的所有排列组合的问题,发现笛卡尔积算法可以解决,但是网上搜索的只有Java版本的实现,于是自己试着用python实现,由于新手代码不太规范。 代码:本人封装了一个类Cartesian...

    javascript笛卡尔积算法实现方法

    以下是一个使用JavaScript实现笛卡尔积的函数`descartes`: ```javascript function descartes(list) { var point = {}; var result = []; var pIndex = null; var tempCount = 0; var temp = []; // 根据...

    数据库管理系统(java实现)

    数据库系统原理实验 数据库管理系统...文件存储表、库,根据sql语句实现建表,建库 可以建立索引(B+树) 可以做笛卡尔积(hash) 自然连接(哈弗曼树)等 有查询树结构 可以完成登录权限管理。 下载后有问题可以联系我。

    java 和 c# 不同的7个方法 实现 ABCD 全排列

    对于四个字符ABCD,我们可以创建两个集合{A, B}和{C, D},然后计算这两个集合的笛卡尔积。在Java中,可以使用`Stream`的`crossJoin()`方法,C#中可使用`Enumerable.Cartesian()`。 6. **堆栈/队列**: 使用堆栈或...

    经典Spark算子的JAVA实现.zip

    本资料“经典Spark算子的JAVA实现.zip”提供了25个核心Spark算子的Java实现,这些实现已经过Junit测试,确保了代码的正确性和可靠性。以下是对这些算子的详细介绍: 1. **map()**: 这是Spark中最基本的转换操作,它...

    pozi:它是一个简单的分布式存储和计算框架,专为处理大规模文件而设计,与 hadoop 不同,它解决了一些问题,例如,将 microsoft office 文件转换为 pdf 或 swf 或计算几个大文件之间的笛卡尔积。由 Linux C 和 Java 构建,C 用于文件存储,Java 用于分布式计算

    3. **笛卡尔积运算**:在大数据背景下,pozi支持计算不同数据集的笛卡尔积,这在数据分析和组合不同数据源时非常有用。 4. **C语言用于文件存储**:C语言的低级别特性使其在处理文件系统的I/O操作时效率很高,这...

    oracle+java的详细介绍

    - 当没有连接条件时,两个表的连接会产生所有可能的行组合,即笛卡尔积。 6. **连接的种类**: - Oracle支持多种连接类型,如内连接(INNER JOIN)、外连接(LEFT JOIN, RIGHT JOIN, FULL JOIN)和自连接等。 7....

    Java+Persistence+with+Hibernate

    - 慎重使用JOIN,避免大数据量的笛卡尔积。 通过学习《Java+Persistence+with+Hibernate》,开发者可以掌握使用Hibernate进行Java持久化开发的技能,从而高效、灵活地管理Java应用程序中的数据库操作。

    java项目编码规范

    对于JOIN操作,确保理解数据关系并谨慎使用,避免产生笛卡尔积。同时,注意数据库设计的规范化,以减少数据冗余和异常。 总的来说,良好的编码规范是软件开发的基础,它能提高代码质量,降低维护成本,也有利于团队...

    Java基础学习39.pdf

    交叉链接(笛卡尔积)会产生所有可能的组合,而内链接只返回匹配的行。外链接允许保留不匹配的行,包括左连接(保留左表的所有行)、右连接(保留右表的所有行)和全连接(保留所有表的行)。在旧的SQL语法中,外...

    阿里巴巴Java开发手册终极版v1.3.0.zip

    - **MyBatis**:规范SQL编写,避免N+1查询和笛卡尔积问题,使用动态SQL提高灵活性。 - **Dubbo**:遵循服务化设计原则,确保服务接口的稳定性和高性能。 5. **MySQL规约** - **索引设计**:合理创建和使用索引,...

    数据库管理系统(dbms)(java)

    1. 笛卡尔积:当两个集合没有共同的关联字段时,执行SELECT语句会返回它们的所有组合,即笛卡尔积。 2. 自然连接(NATURAL JOIN):基于两个表中相同列的等值关系进行连接,无需显式指定连接条件。 查询树结构是...

    全国计算机等级考试二级Java模拟试题9.pdf

    10. 笛卡尔积的结果是两个集合元素的组合,所以关系R和S的笛卡尔积T的元组个数是100*300=30000,答案C正确。 11. Java的多线程特性反映了其并行机制,使得程序可以同时执行多个任务,答案B正确。 12. 编写和运行...

    云计算编程模型中Java应用研究.pdf

    此外,All-Pairs模型用于计算集合的笛卡尔积,常见于图像相似度比较等场景。 【高级编程模型】 随着业务需求的复杂化,通用编程模型往往无法满足所有需求,因此出现了高级编程模型。例如,Google的Sawzall用于处理...

    java开发规范.pdf

    优化SQL语句,减少笛卡尔积和子查询;定期备份数据,确保数据安全;使用索引来提高查询效率,但也要注意过度索引可能导致的写入性能下降。 六、工程结构 良好的工程结构可以提高开发效率和代码可读性。应遵循单一...

    MLDN魔乐科技_Oracle课堂8

    在这个课堂中,我们将深入探讨多表查询的基本语法以及笛卡尔积的运用。 首先,多表查询是数据库操作中的核心技能,它允许用户从两个或更多个相关的表中联合检索数据。在Oracle中,这通常通过使用JOIN语句实现。JOIN...

    语义网 java 范畴论小论文

    集合的笛卡尔积提供了构造新集合的方式,而幂集则是集合的所有子集构成的集合,体现了集合的对偶性。Set还是一个具体范畴,意味着它有实际的数学对象作为其成员。 3. Java的面向对象性: Java的面向对象特性体现在...

Global site tag (gtag.js) - Google Analytics