【问题标题】:generating unique combinations from an array but having every element in each combination. (java)从数组中生成唯一的组合,但每个组合中都有每个元素。 (爪哇)
【发布时间】:2012-06-23 21:28:02
【问题描述】:

我正在尝试从数组中生成所有可能的唯一组合,但它不像生成所有组合那样简单......例如。我有一个数组 {a,b,c,d,e,f} ...我的结果应该是这样的...

  1. ab、cd、ef
  2. abc, def
  3. ac、bd、ef
  4. abcf,编辑
  5. ....等

......基本上在每个结果集中都应该包含数组的所有元素......而且'ab'与'ba'相同,'abcd'与'dcba'或'相同cbda' ....位置无关紧要....并且不允许重复...'aaa'或'aa'无效...如果有人可以为这个问题提供解决方案,将不胜感激... .

【问题讨论】:

  • 这是离散数学作业吗?
  • 1) 这是作业吗(如果是,请添加作业标签)? 2)到目前为止你尝试了什么? 3) 这不是“请提供代码”网站!
  • 嗨...这不是作业... {a,b,c,d,e,f} 是产品的组成部分,我正在尝试创建所有可能的装配组合.. . 我尝试过创建数组的组合,但这似乎不起作用...

标签: java combinations


【解决方案1】:

我建议您构建所有可能的唯一集合大小集合。然后以所有可能的顺序插入所有可能的值。例如,有 5 个可能的值,您就有了设置的大小:

1 1 1 1 1
1 1 1 2
1 2 2
1 1 3
1 4
2 3
5

现在,将实际值放入集合中。对于第一组集合大小,我们得到:

a, b, c, d, e

这不是很有趣,因为所有集合的大小都相同,所以跳到第三组集合大小。在这里,我们填充集合然后移动它们,给我们:

a, bc, de
b, cd, ea
c, de, ab
d, ea, bc
e, ab, cd

这不是一个完整的解决方案,但我已将问题一分为二,我认为您可以从那里着手。

【讨论】:

    【解决方案2】:
     String [] new_array=new String[N];
     array.length=length.of("befdac");
     for(int i=0;i < array.length;i++) //this is first digit
    
    {
    
    for(int j=0;j < array.length;j++) //this is second digit
    {
    if(i==j)continue;
           ................ same with other digits
    
            {
             if((i==j)||(i==k)) continue;
            // start counting in this most inner block
            new_array[i][j][k][l]...[last_digit]=byte(i+65)+byte(j+65)+byte(k+65)+.....+byte(last_digit+65);
            //65=a, 66=b,......
    
             }
     }
    }
    

    new_array[][][][]...[] 将是我没有尝试过的代码。最好的事情你自己做。这没有优化。刚做第一个答案以获得一些分数

    【讨论】:

    • 这对我来说没有任何意义。例如byte(...) 方法从何而来?这不是关于数字,而是关于字符。此外,您应该提供代码的详细说明。
    猜你喜欢
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多