有效地查找一组数字中的组合

时间:2012-11-15 18:22:55

标签: java combinations memory-efficient

我目前正在开发一个java项目,我需要其中一部分给我一个完整的数字组合列表 1<= A<=B<=C<=D<=E<=F<=N其中N是任何整数as small as 75,将作为输入。只要A B C D E F any integerfulfills the equality就可以brute force

我知道我只需使用split来完成每个组合,但这需要很长时间。我想要尝试做的是two separate平等到{{1}}平等,但仍然能够满足原始平等,但它会将运行减少近一半。

2 个答案:

答案 0 :(得分:2)

假设您需要满足指定条件的A, B, C, D, E, F的所有可能组合的列表,则无法比执行强力backtracking search更有效。

对于A的每个可接受的值:找到B的所有可接受值,然后为每个值找到C ...等等。

您将获得与以下相同的运行时间:

  • 分而治之
  • 动态编程
  • 贪婪(只是简化为回溯)

(但这些算法不适合这个问题,需要人为的实施)

答案 1 :(得分:0)

以下内容仅生成有效的有效组合。 N的大值可能需要一段时间,但这是因为会有大量的组合来满足您的不等式。

  

N = 75; 300500200组合

     

N = 100; 1609344100种组合

    for(int A = 1; A <= N ; ++A) {
        for(int B = A; B <= N; ++B) {
            for(int C = B; C <= N; ++C) {
                for(int D = C; D <= N; ++D) {
                    for(int E = D; E <= N; ++E) {
                        for(int F = E; F <=N; ++F) {
                            // do whatever you want with the combo
                        }
                    }
                }
            }
        }
    }