【问题标题】:Generate all unique combinations of Items生成项目的所有独特组合
【发布时间】:2014-01-29 08:05:43
【问题描述】:

我试图生成所有可能的唯一项目组合。

Ex: item1, item2, item3

Combinations: 
   item1+item2+item3
   item1+item2
   item1+item3
   item2+item3
   item1
   item2
   item3

我不知道如何解决这个问题?

for(int i=0;i<size;i++){
   for(int j=i+1;j<size;j++){
       System.out.println(list.item(i)+list.item(j));
   }
}

上面的代码当然适用于两个元素的所有唯一组合。但不适用于 3 元素对等。

【问题讨论】:

  • 只有一项的组合怎么样?
  • 请看看我的回答,看看是否有帮助。
  • @assylias,这也是有效的组合。您也可以选择单个项目。我忘了提

标签: java algorithm unique combinations


【解决方案1】:

如果你有 N 个项目,从 1 数到 2^N-1。每个数字代表一个组合,如下所示:如果设置了位 0(最低有效位),则 item1 在组合中。如果设置了第 1 位,则第 2 项在组合中,依此类推。

如果您不想要 1 项组合,请从 3 开始计数,并忽略所有 2 的幂的组合(4、8、16 等...)。

【讨论】:

  • 对不起,我不明白。任何伪代码?算法的运行时间。
  • 运行时间为 O(2^N),其中 N 是项目数。你无法击败它,因为有 O(2^N) 组合。
  • 会这么复杂吗?您能否按照要求写下要打印的代码。挣扎:P
  • 一点也不复杂。无论如何,自己尝试一下,如果您对代码感到困惑,请提出另一个问题。
【解决方案2】:

guava 内置,如果这是一个选项

 Set<Set<String>> result = Sets.powerSet(Sets.newHashSet("item1", "item2", "item3"));
    for(Set<String> token : result){
        System.out.println(token);
    }

【讨论】:

    【解决方案3】:

    以下Java方案使用zmbq提出的bit方式:

      public static void allComb(int n) {
        BitSet bs = new BitSet();
        while (bs.length() <= n) {
          System.out.println(bs);
          //Inc by 1
          int pos = bs.nextClearBit(0);
          bs.flip(0, pos + 1);      
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多