- 主题:这种组合算法怎么写?
开源的库把人搞废了,只会最简单应用了。
【 在 iStudy 的大作中提到: 】
: a,b,c,d四个对象
: 我要生成a,b,c,d的全组合===C(4,1)+C(4,2)+C(4,3)+C(4,4)
: 结果就是输出 {a,b,c,d, ab,ac,ad,bc,bd,cd,abc,abd,acd,bcd,abcd}
: ...................
--
FROM 180.168.125.*
我好多年前写自动化脚本的时候遇到过,貌似是用递归算法
--
FROM 223.148.134.*
爱学习没错,得善用工具。
chatgpt回答:
是的,Java 中有许多库可以用于生成集合的所有组合。一个常用的库是 Google 的 Guava 库。Guava 提供了一个 Sets 类,其中包含了一些生成组合的方法。
以下是使用 Guava 库生成所有组合的示例代码:
首先,确保在你的项目中引入 Guava 库。如果你使用的是 Maven,可以在你的 pom.xml 文件中添加以下依赖项:
xml
复制代码
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
下面是示例代码,展示如何生成所有组合:
java
复制代码
import com.google.common.collect.Sets;
import java.util.Set;
public class CombinationExample {
public static void main(String[] args) {
Set<String> elements = Sets.newHashSet("a", "b", "c", "d");
// C(4,1) to C(4,4)
for (int i = 1; i <= elements.size(); i++) {
Set<Set<String>> combinations = Sets.combinations(elements, i);
for (Set<String> combination : combinations) {
System.out.println(combination);
}
}
}
}
【 在 iStudy 的大作中提到: 】
: a,b,c,d四个对象
: 我要生成a,b,c,d的全组合===C(4,1)+C(4,2)+C(4,3)+C(4,4)
: 结果就是输出 {a,b,c,d, ab,ac,ad,bc,bd,cd,abc,abd,acd,bcd,abcd}
: ...................
--
FROM 120.245.122.*
c++ stl库里面有标准的全排列算法,可以借鉴一下。
【 在 iStudy 的大作中提到: 】
: a,b,c,d四个对象
: 我要生成a,b,c,d的全组合===C(4,1)+C(4,2)+C(4,3)+C(4,4)
: 结果就是输出 {a,b,c,d, ab,ac,ad,bc,bd,cd,abc,abd,acd,bcd,abcd}
: ...................
--
FROM 1.202.147.*
用库的话更简单,想自己写的话用递归也直观, 只需要想清楚C(m,n) = C(m-1,n) + C(m-1,n-1),就可以写递归函数了
python:
def all_combine(str):
res = []
for i in range(len(str)):
res = res + combine(str,i+1)
return res
# 返回s字符长度为n 的组和,s里没有重复字符
def combine(s, n):
if n < 1:
return []
if n == 1:
return [c for c in s]
if len(s) < 1:
return []
return [s[0] + p for p in combine(s[1:], n-1)] + combine(s[1:], n)
--
FROM 123.126.24.*
第三方库,选择不少。
apache也有。
【 在 lusio 的大作中提到: 】
: 爱学习没错,得善用工具。
: chatgpt回答:
: 是的,Java 中有许多库可以用于生成集合的所有组合。一个常用的库是 Google 的 Guava 库。Guava 提供了一个 Sets 类,其中包含了一些生成组合的方法。
: ...................
--
FROM 58.37.127.*
对。这个思路好。以前学过彻底忘记了。。
【 在 fyg 的大作中提到: 】
: 用库的话更简单,想自己写的话用递归也直观, 只需要想清楚C(m,n) = C(m-1,n) + C(m-1,n-1),就可以写递归函数了
: python:
: def all_combine(str):
: ...................
--
FROM 58.37.127.*
请问这句话啥意思
if ((i & (1 << j)) != 0) {
combination.add(array.get(j));
}
这个逻辑背后的理论是啥?
【 在 iwannabe 的大作中提到: 】
: 用二进制的方法,
: public static ArrayList<ArrayList<Integer>> generateCombinations(Array
: List <Integer> array) {
: ...................
--
FROM 58.37.127.*
这个太精妙了。。。这是人写出来的吗
【 在 lambo 的大作中提到: 】
: [Java版]
: static List<String> fullCombination(String[] elems) {
: List<String> fullElements = new ArrayList<>();
: ...................
--
FROM 58.37.127.*
你这个是错的啊
输出{a,b,c,d}
【 在 scy 的大作中提到: 】
: import java.util.ArrayList;
: import java.util.List;
: public class CombinationGenerator {
: ...................
--
FROM 58.37.127.*