【问题标题】:Algorithm: exploding list (subsets)算法:爆炸列表(子集)
【发布时间】:2012-06-13 16:15:30
【问题描述】:

我需要有关此算法的帮助。

我有一个这样的文本文件:

input1
input2
etc...

每个 inputX 都有一个元素子集,例如:

input1 -> {input1_1, input1_2, ...}
input2 -> {input2_1, input2_2, input_2_3, ...}
inputX -> {inputX_1, inputX_2, inputX_3, ...}

我必须在以下位置制作类似的东西:

input1_1
input2_1
--------

input1_2
input2_1
--------

input1_1
input2_2
--------

input1_2
input2_2
--------

input1_1
input2_3
--------

input1_2
input2_3
--------

你能给我推荐一些算法吗? 我能想到的只是一个while/for循环,但我不知道如何正确设置它。

非常感谢, 皮尔保罗

【问题讨论】:

  • 这不是家庭作业...我正在与其他 4-5 人一起做一个 Android 项目。

标签: java algorithm loops subset


【解决方案1】:

如果您知道有多少个列表,则可以使用嵌套循环:

for (int i = 0 ; i != input1.size() ; i++)
    for (int j = 0 ; j != input2.size() ; j++)
        for (int k = 0 ; k != input3.size() ; k++) {
            String[] data = new String[] {
                input1.get(i), input2.get(j), input3.get(k)
            };
            Process(data);
        }

如果你不知道有多少个列表,你需要一个递归解决方案:

void processCombinations(int[] pos, int n, ArrayList<ArrayList<String> > inputs, String[] soFar) {
    if (n == pos.length) {
        Process(soFar);
        return;
    }
    ArrayList<String> input = inputs.get(n);
    for (pos[n] = 0 ; pos[n] != input.size() ; pos[n]++) {
        soFar[n] = input.get(pos[n]);
        processCombinations(pos, n+1, input, soFar);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多