生成带重复的笛卡尔乘积过程 Cartesian Product with Repetition
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的更多相关文章
- [转]sql语句中出现笛卡尔乘积 SQL查询入门篇
本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路. 多表连接简介 在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一个 ...
- ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积02, 在界面实现
在"ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积01, 在控制台实现"中,在控制台应用程序中实现了属性值的笛卡尔乘积.本篇在界面中实现.需要实现的大致如下: 在界面 ...
- sql语句中出现笛卡尔乘积 SQL查询入门篇
2014-12-29 凡尘工作室 阅 34985 转 95 本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路. 多表连接简介 ...
- ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积01, 在控制台实现
在电商产品模块中必经的一个环节是:当选择某一个产品类别,动态生成该类别下的所有属性和属性项,这些属性项有些是以DropDownList的形式存在,有些是以CheckBoxList的形式存在.接着,把C ...
- sql语句中出现笛卡尔乘积
没有join条件导致笛卡尔乘积 学过线性代数的人都知道,笛卡尔乘积通俗的说,就是两个集合中的每一个成员,都与对方集合中的任意一个成员有关联.可以想象,在SQL查询中,如果对两张表join查询而没有jo ...
- Mysql训练:两个表中使用 Select 语句会导致产生 笛卡尔乘积 ,两个表的前后顺序决定查询之后的表顺序
力扣:超过经理收入的员工 Employee 表包含所有员工,他们的经理也属于员工.每个员工都有一个 Id,此外还有一列对应员工的经理的 Id. +----+-------+--------+----- ...
- 笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)
初识遗传算法Genetic Algorithm(GA) 遗传算法是计算数学中用于解决最优化的搜索算法,是进化算法的一种.进化算法借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传.突变.自然选 ...
- js实现的笛卡尔乘积-商品发布
//笛卡儿积组合 function descartes(list) { //parent上一级索引;count指针计数 var point = {}; var result = []; var pIn ...
- 笛卡尔乘积 python语法
修改为 bot_name = spider.settings.attributes['BOT_NAME'].value tablenameCommon = 'amazon_hot_new_releas ...
- Js笛卡尔乘积
self.getDescartesSku = function (selSaleProp, i, nowLst, allALst) { if (selSaleProp.length = ...
随机推荐
- 【GD32L233C-START】DAC输出(正弦波、锯齿波、方波)
[GD32L233C-START]DAC输出(正弦波.锯齿波.方波) 1.介绍GD32L233C采用的是一款M23的内核.这个芯片据说功耗非常的低,低到什么程度呢?等后面我们再进行测试,今天我们主要来 ...
- 英语文档阅读学习系列之ZYNQ-7000 All Programmable SOC Packaging and Pinout
UG865-Zynq-7000-pkg-pinout 1.Table 一个overview和其他部分的构成一个整体. 2.overview This section describes the pin ...
- MobileNext:打破常规,依图逆向改造inverted residual block | ECCV 2020
论文深入分析了inverted residual block的设计理念和缺点,提出更适合轻量级网络的sandglass block,基于该结构搭建的MobileNext.根据论文的实验结果,Mobil ...
- KingbaseES V8R6集群运维案例---数据块故障自动修复(auto_bmr)
案例说明: 在Oracle11.2版本之后,DataGuard 若搭建实时应用日志的物理备库,那么在主库数据文件少 量坏块的情况下,可以利用ABCR技术快速修复坏块. Starting in Orac ...
- 如何使用Java代码混淆技术保护您的应用程序
摘要 本文探讨了代码混淆在保护Java代码安全性和知识产权方面的重要意义.通过混淆技术,可以有效防止代码被反编译.逆向工程或恶意篡改,提高代码的安全性.常见的Java代码混淆工具如IPAGuard.A ...
- Django实现发送邮件
1.获取QQ邮箱授权码 打开QQ邮箱 --> 设置 --> 账号 --> 下拉页面 --> 开启POP3/SMTP服务 --> 短信验证 --> 点击"我 ...
- 【已解决】Windows环境下redis启动失败
在redis安装目录下打开cmd窗口: 依次输入: redis-cli.exe shutdown exit redis-server.exe redis.windows.conf ps:启动失败可能是 ...
- wordpress自建博客站,在页脚添加网站总访问次数
wordpress自建博客站,在页脚添加网站总访问次数 笔者使用的主题是 GeneratePress 版本:3.1.3 打开footer.php编辑 <div style="text- ...
- jQuery AJAX 常见属性
1 jQuery.ajax(...) 2 部分参数: 3 url:请求地址 4 type:请求方式,GET.POST(1.9.0之后用method) 5 headers:请求头 6 data:要发送的 ...
- 到底什么是AQS?面试时你能说明白吗!
写在开头 上篇文章写到CAS算法时,里面使用AtomicInteger举例说明,这个类在java.unit.concurrent.atomic包中,存储的都是一些原子类,除此之外,"java ...