What is Cartesian Product with Repetition

比如说有两个集合:

\(\{1, 2, 3\}\)

\(\{A, B, C\}\)

想把他们组合成所有可能组合,比如,

1AAA

1AAB

1AAC

...

这种组合可以称为"有重复的笛卡尔积"或"带重复的笛卡尔乘积"(Cartesian Product with Repetition)。

带重复的笛卡尔乘积(Cartesian Product with Repetition)具有以下特征:

  • 涉及两个或多个集合:它是针对两个或更多个集合进行操作。在您的示例中,涉及两个集合{1, 2, 3}和{A, B, C}。

  • 元素可以重复出现:与传统的笛卡尔积不同,在带重复的笛卡尔乘积中,同一个集合中的元素可以在生成的组合中多次出现。在您的示例中,第二个集合{A, B, C}中的元素可以在组合中重复出现,比如AAA、ABB等。

  • 生成的组合长度固定:生成的组合的长度是事先确定的,等于参与集合的数量。在您的示例中,生成的组合长度为2,因为涉及两个集合。

  • 组合的排列顺序不同视为不同组合:生成的组合中,元素的排列顺序不同就被视为不同的组合。例如,AB和BA是两个不同的组合。

  • 组合数量呈指数级增长:随着参与集合的元素数量增加,生成的组合数量会呈指数级增长。如果有n个集合,每个集合有m个元素,那么生成的组合数量将是m^n。

总的来说,带重复的笛卡尔乘积是一种特殊的组合形式,它允许元素重复出现。

Code Demo

import java.util.ArrayList;
import java.util.List; public class Combination {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("2");
list1.add("3"); List<String> list2 = new ArrayList<>();
list2.add("A");
list2.add("B");
list2.add("C"); // 用于存储所有可能的组合
List<String> combinations = new ArrayList<>(); // 遍历第一个列表中的每个元素
// 遍历list1中的每个元素,对于每个元素:
// 调用generateCombinations方法,将list2和list2的长度作为参数传递进去,并将生成的组合添加到combinations列表中。
for (String item1 : list1) {
// 对于每个元素,生成第二个列表中元素的所有可能组合,并添加到 combinations 列表中
combinations.addAll(generateCombinations(list2, list2.size(), item1));
} // 打印所有可能的组合
System.out.println("所有可能的组合:");
for (String combination : combinations) {
System.out.println(combination);
}
} /**
* 生成第二个列表中元素的所有可能组合
*
* @param list 第二个列表
* @param length 要生成的组合长度
* @param prefix 已经选择的元素前缀
* @return 所有可能的组合
*/
private static List<String> generateCombinations(List<String> list, int length, String prefix) {
// 所有可能的组合 存储
List<String> combinations = new ArrayList<>(); // 如果要生成的组合长度为 0,说明已经生成了所有元素的组合
if (length == 0) {
// 将前缀添加到结果列表中并返回
combinations.add(prefix);
return combinations;
} // 遍历第二个列表中的每个元素
for (int i = 0; i < list.size(); i++) {
// 将当前元素追加到前缀中
String newPrefix = prefix + list.get(i);
// 递归调用 generateCombinations 方法,将 length 减 1,并将新的前缀作为参数传递进去
combinations.addAll(generateCombinations(list, length - 1, newPrefix));
} return combinations;
}
}

out:

所有可能的组合:
1AAA
1AAB
1AAC
1ABA
1ABB
1ABC
1ACA
1ACB
1ACC
1BAA
1BAB
1BAC
1BBA
1BBB
1BBC
1BCA
1BCB
1BCC
1CAA
1CAB
1CAC
1CBA
1CBB
1CBC
1CCA
1CCB
1CCC
2AAA
2AAB
2AAC
2ABA
2ABB
2ABC
2ACA
2ACB
2ACC
2BAA
2BAB
2BAC
2BBA
2BBB
2BBC
2BCA
2BCB
2BCC
2CAA
2CAB
2CAC
2CBA
2CBB
2CBC
2CCA
2CCB
2CCC
3AAA
3AAB
3AAC
3ABA
3ABB
3ABC
3ACA
3ACB
3ACC
3BAA
3BAB
3BAC
3BBA
3BBB
3BBC
3BCA
3BCB
3BCC
3CAA
3CAB
3CAC
3CBA
3CBB
3CBC
3CCA
3CCB
3CCC

生成带重复的笛卡尔乘积过程 Cartesian Product with Repetition的更多相关文章

  1. [转]sql语句中出现笛卡尔乘积 SQL查询入门篇

    本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路. 多表连接简介 在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一个 ...

  2. ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积02, 在界面实现

    在"ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积01, 在控制台实现"中,在控制台应用程序中实现了属性值的笛卡尔乘积.本篇在界面中实现.需要实现的大致如下: 在界面 ...

  3. sql语句中出现笛卡尔乘积 SQL查询入门篇

    2014-12-29  凡尘工作室   阅 34985  转 95 本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路. 多表连接简介 ...

  4. ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积01, 在控制台实现

    在电商产品模块中必经的一个环节是:当选择某一个产品类别,动态生成该类别下的所有属性和属性项,这些属性项有些是以DropDownList的形式存在,有些是以CheckBoxList的形式存在.接着,把C ...

  5. sql语句中出现笛卡尔乘积

    没有join条件导致笛卡尔乘积 学过线性代数的人都知道,笛卡尔乘积通俗的说,就是两个集合中的每一个成员,都与对方集合中的任意一个成员有关联.可以想象,在SQL查询中,如果对两张表join查询而没有jo ...

  6. Mysql训练:两个表中使用 Select 语句会导致产生 笛卡尔乘积 ,两个表的前后顺序决定查询之后的表顺序

    力扣:超过经理收入的员工 Employee 表包含所有员工,他们的经理也属于员工.每个员工都有一个 Id,此外还有一列对应员工的经理的 Id. +----+-------+--------+----- ...

  7. 笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)

    初识遗传算法Genetic Algorithm(GA) 遗传算法是计算数学中用于解决最优化的搜索算法,是进化算法的一种.进化算法借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传.突变.自然选 ...

  8. js实现的笛卡尔乘积-商品发布

    //笛卡儿积组合 function descartes(list) { //parent上一级索引;count指针计数 var point = {}; var result = []; var pIn ...

  9. 笛卡尔乘积 python语法

    修改为 bot_name = spider.settings.attributes['BOT_NAME'].value tablenameCommon = 'amazon_hot_new_releas ...

  10. Js笛卡尔乘积

    self.getDescartesSku = function (selSaleProp, i, nowLst, allALst) {         if (selSaleProp.length = ...

随机推荐

  1. Zookeeper学习笔记-安装

    zookeeper官网地址https://zookeeper.apache.org/ 1.卸载CentOS自带的open jdk,安装oracle jdk(1.8) 2.时间同步 #安装ntpdate ...

  2. kingbaseES坏块修复功能

    1.自动坏块修复简介 主数据库访问系统表数据.索引.持久化用户表数据.索引时,从磁盘读取数据块至共享缓冲区,如果检测到坏块,自动从备节点获取坏块的副本,并修复坏块. 坏块修复相关参数 参数名称 默认值 ...

  3. SQLServer递归触发器在KES中的一次改造分析

    文章概要: 某项目将数据从 SQLSERVER 迁移到 KES.其中SQLSERVER中触发器用到了 TRIGGER_NESTLEVEL() 函数,KES并不能直接支持该函数. 起初在分析该问题时想复 ...

  4. KingbaseES V8R6 集群运维案例 -- 归档失败导致 Switchover 失败

    案例说明: KingbaseES V8R6集群,备库在执行'repmgr standby switchover'时,切换失败,出现以下故障: 经检查发现是主库归档配置错误,主库出现归档失败导致. 适用 ...

  5. ssh登录太慢了,每次都要20s

    背景 大家工作时,少不了ssh登录各个服务器,我这边手里也有很多服务器,有一些登录很快就进去了,有些要卡半天才能进去.之前以为是公司网络问题,每次也就忍了,这次突然不想忍了,决定定位一下. 我这边的服 ...

  6. #AC自动机,树状数组#洛谷 2414 [NOI2011] 阿狸的打字机

    题目 分析 首先考虑按照题意建出一个AC自动机, 然后\(s[x]\)在\(s[y]\)出现的次数也就是 在fail树上,根节点到\(y\)中一共出现了多少个\(x\), 在\(x\)的终止节点处统计 ...

  7. #威佐夫博弈#洛谷 2252 [SHOI2002]取石子游戏

    题目 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子. 游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子: 二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完 ...

  8. van-cell如何使用插槽

    van-cell 是 Vant 组件库中的一个单元格组件,用于展示列表中的信息.Vant 是一个轻量.可靠的移动端 Vue 组件库. 在 Vant 中,van-cell 组件提供了多个插槽(slot) ...

  9. Seaborn分布数据可视化---统计分布图

    统计分布图 barplot() sns.barplot( x=None, y=None, hue=None, data=None, order=None, hue_order=None, estima ...

  10. 重走py 之路 ——字典和集合(二)

    前言 python 中有6大标准类型: 数字(Number) 字符串(String) 列表(List) 元组(Tumple) 集合(Set) 字典(Dictionary) 前面已经介绍了上面4种,还有 ...