0

在问这个问题之前我做了一些研究,但没有得到适当的答案。我必须从一组 2 个类别中计算唯一可能的组合。每个类别都有一些值。例如,在类别 1 中有 3 个值,在类别 2 中有 4 个值。

例子:

Category1     Category2
  A             D
  B             E
                F

我正在寻找的独特组合是(A、AD、AE、AF、B、BD、BE、BF、D、E、F)。这是11种组合。我需要的是一个可以计算这个的公式。

4

5 回答 5

2
Set<String> s = new HashSet<>();
for (String a: cat1){
  for (String b: cat2){
     s.add(a + b)    
  }
}
s.addAll(cat1);
s.addAll(cat2);
于 2013-10-15T14:13:27.430 回答
1

我读这个问题是想计算潜在组合的数量,而不是想实际确定这些组合是什么。在这种情况下:

令 A 等于第一类选项的数量,B 等于第二类选项的数量。

然后结果 = (A * B) + A + B。

于 2013-10-15T14:16:39.150 回答
1

对于包含n 个元素的集合,您有n 个可能的元素可供选择,因此在您的示例中,您有 2*3 = 6 种组合。如我所见,您希望包含仅选择其中一个类别的元素的组合。这给出了 2*3 + 2 + 3 = 11(2*3 个组合,每个类别有一个元素,2 个组合只包含 cat1 中的元素,3 个组合只包含 cat2 中的元素)。

设 n1 为 cat1 中的元素数,n2 为 cat2 中的元素数,那么您的公式将是 n1*n2+n1+n2。如果要包含完全不包含任何元素的组合,请添加 1。

于 2013-10-15T14:21:15.273 回答
0

唯一组合 = Category1 union Category2 union (Category1 x Category2)

于 2013-10-15T14:15:23.767 回答
0

只需遍历这两个类别。

public static void main(String[] args) {
    for (String first : new String[] {"A", "B", ""}) {
        for (String second : new String[] {"", "D", "E", "F"}) {
            String combination = first + second;
            if (combination.isEmpty()) {
                continue;
            }
            System.out.println(combination);
        }
    }
}
于 2013-10-15T14:18:05.283 回答