计算独特的组合

时间:2013-10-15 14:10:34

标签: java math

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

示例:

Category1     Category2
  A             D
  B             E
                F

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

5 个答案:

答案 0 :(得分:2)

Set<String> s = new HashSet<>();
for (String a: cat1){
  for (String b: cat2){
     s.add(a + b)    
  }
}
s.addAll(cat1);
s.addAll(cat2);

答案 1 :(得分:1)

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

令A等于第1类中的选项数,B等于第2类中的选项数。

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

答案 2 :(得分: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。

答案 3 :(得分:0)

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

答案 4 :(得分: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);
        }
    }
}