我需要有关此算法的帮助。
我有一个这样的文本文件:
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 循环,但我不知道如何正确设置它。
非常感谢, PIL 保罗
最佳答案
如果你知道有多少个列表,你可以用嵌套循环来做:
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);
}
}
关于java - 算法:爆炸列表(子集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10968573/